題目**
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...