這是這次算法作業裏邏輯最簡單的。。。但是我還是只想到了暴力我好蠢。。。
問題
給定兩個字符串s1和s2,要求判斷s2是否能夠被通過s1做循環移位(rotate)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。
分析
最初想法十分愚蠢,大概就是換一次順序就比較一次,是否包含。
這樣每次都要比較,時間複雜度就是O(n2)
但是,萬能的某度給了我新思路,既然是循環位移,那就是說…
ABCD—>ABCDA---->ABCDAB---->ABCDABC---->ABCDABCD……
我在後面加上個自己,從不同的位置開始數,就是不同的循環位移串了,就包含了所有情況啊!!!!(而且複雜度還是O(n))
代碼
/**
* @ClassName RotateString
* @Description 字符串移位包含問題
* 給定兩個字符串s1和s2,要求判斷s2是否能夠被通過s1做循環移位(rotate)得到的字符串包含。
* 例如,S1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。
* @author 滑技工廠 https://blog.csdn.net/qq_41718454
* @date 2020/3/7
* @version 1.0
*/
public class RotateString {
/*
* @Title rotate
* @Description 方法
* @author 滑技工廠
* @Date 2020/3/7
* @param [s1, s2]
* @return boolean
* @throws
*/
public static boolean rotate(String s1, String s2) {
//創造一個s1,從不同的位置就是各個循環位移後的串
s1 += s1;
//比較
if (s1.contains(s2))
return true;
else
return false;
}
public static void main(String[] args) {
System.out.println(rotate("AABCD", "CDAA"));
}
}
就這樣愉快的結束了