字符串移位包含問題

字符串移位包含問題

這是這次算法作業裏邏輯最簡單的。。。但是我還是只想到了暴力我好蠢。。。
在這裏插入圖片描述

問題

給定兩個字符串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"));
    }
}

就這樣愉快的結束了
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章