一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 题目给出两个字符串s和字符串goal
- 要求对字符串s进行旋转,将s左边的字符移动到最右边
- 对字符串s进行旋转得到与字符串goal相等,返回True。否则返回False
二、思路分析:
我们拿到本题,字符串进行旋转。脑袋会了,我们来画图模拟一下:
- 开头的字符串只能添加到字符串末尾进行旋转
- 首先比较两个字符串的长度,如果不一致时,则直接返回False
- 当字符串长度相同时,我们使用滑动窗口的概念。对字符串进行遍历
- 当指针i所指的字母时,字符串s与字符串goal不相等时,则字符串s拼接s[i],指针遍历
如上图所示,我们使用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一样的
- 一行代码搞定
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记录如下:
时间复杂度O(n),空间复杂度O(1).
以上是本期内容,欢迎大佬们点赞评论,下期见~~