字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。
示例1:
输入:s1 = "waterbottle", s2 = "erbottlewat"
输出:True
示例2:
输入:s1 = "aa", s2 = "aba"
输出:False
提示:
字符串长度在[0, 100000]范围内。
说明:
你能只调用一次检查子串的方法吗?
方法一:拼接
再一次被各位大神的智慧折服,这道题只需要动一下小心思,假设s1是由ab两部分组成,那么旋转之后的s2由ba组成,现在只需要将两个s2拼接成一个新的字符串baba,然后判断s1的ab部分是否在新字符串中即可。相反,拼接s1来判断s2也可。
class Solution:
def isFlipedString(self, s1: str, s2: str) -> bool:
if len(s1)!=len(s2):
return False
if s1 in s2+s2:
return True
else:
return False
方法二:哈希表
分别用两个哈希表来统计两个字符串的字符出现次数,首先判断两个字符的长度,不一样直接返回false。对然分别用两个哈希表统计完两个字符串的出现次数之后,判断哈希表的长度是否一样,也就是两个字符串的字符种类是否一样,然后再判断每个字符出现的次数是否一样,都一样的话返回true,否则返回false。
class Solution:
def isFlipedString(self, s1: str, s2: str) -> bool:
if len(s1)!=len(s2):
return False
dic1=defaultdict(int)
dic2=defaultdict(int)
for i in s1:
dic1[i]+=1
for i in s2:
dic2[i]+=1
if len(dic1)!=len(dic2):
return False
for i in s1:
if dic1[i]!=dic2[i]:
return False
return True