【LeetCode】796. 旋转字符串

131 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 题目给出两个字符串s和字符串goal
    • 要求对字符串s进行旋转,将s左边的字符移动到最右边
    • 对字符串s进行旋转得到与字符串goal相等,返回True。否则返回False

二、思路分析:

我们拿到本题,字符串进行旋转。脑袋会了,我们来画图模拟一下:

  • 开头的字符串只能添加到字符串末尾进行旋转
  • 首先比较两个字符串的长度,如果不一致时,则直接返回False
  • 当字符串长度相同时,我们使用滑动窗口的概念。对字符串进行遍历
  • 当指针i所指的字母时,字符串s与字符串goal不相等时,则字符串s拼接s[i],指针遍历

image.png

如上图所示,我们使用python很容易实现出来

def rotateString(self, s, goal):
    if len(s) != len(goal):
        return False       
    for i in range(len(s)):
        if s[i:] == goal:
            return True            
        s = s + s[i]
    return False

我们仔细观察上述思路,在对旋转字符串s过程中,最终都会得到两个字符串s拼接样子

  • 因此就是在s+s字符串中找出子串是否与字符串goal一样的

image.png

  • 一行代码搞定
def rotateString(self, s, goal):
    return len(s) == len(goal) and goal in s + s

官网上,还可以通过字符串s与字符串goal的位置来判断

  • 双循环for来遍历字符串s
  • 则s[(i+j)%n] 与 goal[j] 是相等
  • 当第一层for循环i固定,遍历j所有的字符串都相等,则返回True
  • 当所有的i都遍历完,都没有找到字符串s与goal相等,则返回False
class Solution(object):
    def rotateString(self, s, goal):
        """
        :type s: str
        :type goal: str
        :rtype: bool
        """

        if len(s) != len(goal):

            return False

        for i in range(len(s)):

            for j in range(len(s)):

                if s[(i+j)%len(s)] != goal[j]:

                    break
            else:
                return True
        return False

三、总结:

我们使用拼接方法解答本题,AC记录如下:

image.png

时间复杂度O(n),空间复杂度O(1).

以上是本期内容,欢迎大佬们点赞评论,下期见~~