判断两个字符串是否互为旋转词 Python版

本文介绍了一种用于判断两个字符串是否为旋转词的高效算法。通过将一个字符串复制并连接自身,然后检查另一个字符串是否作为子串存在于这个双倍长度的字符串中。此方法简单且时间复杂度为O(m+n)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目
如果将一个 str1 从任意的位置切分开,分成两部分,将后面一部分放置在前面, 再组合起来成为 str2,构成了旋转词。
例如:str1 = “apple”,str2 = “leapp”,两个词就是旋转词。

代码

    def is_rotation(str1, str2):
        if str1 == "" or str2 == "" or len(str1) != len(str2):
            return False
        str_double = str1 + str1
        if str2 in str_double:
            return True
        else:
            return False

分析
1、若为空字符串,就没有旋转这个含义,如果两个字符串长度不相等,也不可能互为旋转。
2、将其中一个字符串翻倍,则另一个如果是旋转词的话,一定在翻倍的字符串中。
3、由于len是个函数,其时间复杂度是 o(m),空间复杂度是 o(m),匹配字符串的复杂度为 o(m+n)。所以总的来说,时间复杂度为 o(m+n)

体会
1、讲真,由于python的封装真的太好,我直接使用了 in关键字,或者 字符串内置的 find方法也好,这两种方法具体内在的算法复杂度我还没有了解过。但是这里有几种字符串匹配算法,
KMP算法:从前往后匹配,尽最大努力在匹配失败后从失败处继续匹配;
BM算法:从后往前匹配,同样是尽量减少不必要的匹配。
时间复杂度,均为两个字符串长度级别。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值