程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 判斷s2是否能夠被通過s1做循環移位(rotate)得到的字符串是否包含,s2rotate

判斷s2是否能夠被通過s1做循環移位(rotate)得到的字符串是否包含,s2rotate

編輯:C#入門知識

判斷s2是否能夠被通過s1做循環移位(rotate)得到的字符串是否包含,s2rotate


問題:給定兩個字符串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         }

 

                      ------再一次站在巨人的肩膀上

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved