題目描述:給定兩個字串s1和s2,要求判定s2是否能夠被s1做迴圈移位得到的字串包含。 例如:s1=aabcd和s2=cdaa,返回true;給定s1=abcd和s2=acbd,返回false。
解法1:這是任何人都可以想到的乙個做法,列舉s1迴圈移位的結果,看是否有能與s2進行匹配的。
int checkrotate(char s1, char s2)
{ int len = strlen(s1);
for(int i = 0;i
但是,這裡採用窮舉的方法,在s1長度較大時,顯然效率是比較低的。(犧牲時間)
解法2:abcd->dabc->cdab->bcda->abcd
s1s1--->abcdabcd, 可以看到迴圈移位後所形成的字串都在s1s1中。因此可以看s1s1中是否包含s2即可判斷。(以空間複雜度換取時間複雜度)
thinking: 能否在空間和時間上做得兩全齊美呢?
程式設計之美3 1 字串移位包含問題
程式設計之美3.1 字串移位包含問題。判斷s2能否被s1做迴圈移位得到的字串包含,若直接判斷效率較低。可以將s1s1連線起來,如果s2可以通過迴圈移位得到,則s2一定是s1s1的子串,可以通過呼叫strstr得到。時間複雜度o n m 不過strstr的實現效率較低,可以使用kmp判斷是否是子串。每...
程式設計之美3 1 字串移位包含問題
這道題目的意思是給定乙個字串,作為源字串,之後給出其他的字串,確定源字串是否能夠經過旋轉而得到給定的字串,即移位包含問題。假如,給定乙個字串 abcdefg,接著給定字串 cdefgab,很顯然,給定的字串是可以經過源字串旋轉而得到的,但是,給定字串 cdegfab 就不能由源字串經過旋轉而得到。當...
程式設計之美3 1 字串移位包含問題
這道題目的意思是給定乙個字串,作為源字串,之後給出其他的字串,確定源字串是否能夠經過旋轉而得到給定的字串,即移位包含問題。假如,給定乙個字串 abcdefg,接著給定字串 cdefgab,很顯然,給定的字串是可以經過源字串旋轉而得到的,但是,給定字串 cdegfab 就不能由源字串經過旋轉而得到。當...