字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。
示例1:
输入:s1 = "waterbottle", s2 = "erbottlewat"
输出:True
示例2:
输入:s1 = "aa", s2 = "aba"
输出:False
提示:
字符串长度在[0, 100000]范围内。
说明:
你能只调用一次检查子串的方法吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/string-rotation-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法一:拼接
再一次被各位大神的智慧折服,这道题只需要动一下小心思,假设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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)