【面试题 01.09. 字符串轮转】

【面试题 01.09. 字符串轮转】,第1张

【面试题 01.09. 字符串轮转】

字符串轮转。给定两个字符串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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5715048.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存