判斷兩個字串是否互為旋轉詞 Python版

2021-08-10 14:41:04 字數 779 閱讀 1190

題目**

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演算法:從後往前匹配,同樣是儘量減少不必要的匹配。

時間複雜度,均為兩個字串長度級別。

判斷兩個字串是否互為旋轉詞

from 牛客 旋轉詞的定義為兩個字串組成字元相同,只是字元排序不同。比如字串abcd旋轉詞為bcda,cdab,dabc三個。以下為兩個實現方法。兩種實現方法的思考的關鍵點都是如何獲取旋轉詞。首先找旋轉詞的特點,是原字串的首個字元放在最後不斷形成的,所以如果將兩個原字串拼在一起,就可以發現所有旋轉...

判斷兩個字串是否互為旋轉詞

題目 如果乙個字串str,把字串str前面任意的部分挪到後面形成的字串叫作str的旋轉詞。比如str 12345 str的旋轉詞 有 12345 23451 34512 45123 和 51234 給定兩個字串a和b,請判斷a和b是否互為旋轉詞。若a和b長度不相等,則a和b必然不互為旋轉詞,直接返回...

字串問題 判斷兩個字串是否互為旋轉詞

如果乙個字串str,把字串str前面的任意部分挪到後面形成的字串叫做str的旋轉詞。給定兩個字串,判斷是否互為旋轉詞。比如 a abcd b cdab true a abcd b bcad false 解題思路 如果長度不一樣,肯定是false,如果長度一樣,時間複雜度是o n 方法一 直接利用st...