栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【面试题 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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/718732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号