問題:給定兩個字符串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上,這樣時間復雜度就降低了。
”
代碼如下:為什麼不封裝呢?你猜。
1 static void Main(string[] args) 2 { 3 4 String s1="ABDDE"; 5 String s2="DDAB"; 6 string s3=string.Concat(s1,s1); 7 if (s3.Contains(s2)) 8 { 9 Console.WriteLine("true"); 10 }else{ 11 Console.WriteLine("false"); 12 } 13 Console.ReadKey(); 14 15 }
------再一次站在巨人的肩膀上