1. 程式人生 > >字串移位包含的問題(程式設計之美)

字串移位包含的問題(程式設計之美)

 問題:給定兩個字串s1和s2,要求判斷s2是否能夠被通過s1做迴圈移位(rotate)得到的字串包含。例如,S1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。

我們也可以對迴圈移位之後的結果進行分析。

以S1 = ABCD為例,先分析對S1進行迴圈移位之後的結果,如下所示:

ABCD--->BCDA---->CDAB---->DABC---->ABCD……

假設我們把前面的移走的資料進行保留,會發現有如下的規律:

ABCD--->ABCDA---->ABCDAB---->ABCDABC---->ABCDABCD……

因此,可以看出對S1做迴圈移位所得到的字串都將是字串S1S1的子字串。如果S2可以由S1迴圈移位得到,那麼S2一定在S1S1上,這樣時間複雜度就降低了。