尋找連續或不連續的子字串

月小貓發表於2020-12-17
	//在s字串中找到t子字串,要求t的字元在s中可不連續存在。如:s="abc"、t="ac"|t="ab" 這兩個t都是s的子串。
//--->雙指標法
public boolean lookup(String s,String t){
        /*
            思路:index先指向t的第一位字元,如果在s中找到該字元,index就指向下一位。s的則繼續往下,一直到在s中找到t。
                找不到就找不到...
         */
        if(t.length() == 0) return true;
        if(s.length()==0 && t.length() == 0) return true;
         //t的指標
        int index = 0;
        for (int i = 0; i < s.length(); i++) {
            if(s.charAt(i)==t.charAt(index)) index++;
            if(index == t.length()) return true;
        }
        return false;
    }
//如果是找連續的子字串呢?
public static boolean lookup(String s,String t){
        /*
            思路:index先指向t的第一位字元,如果在s中找到該字元,index就指向下一位。s的則繼續往下,一直到在s中找到t。
                找不到就找不到...
         */
    //t的指標
    if(t.length() == 0) return true;
    if(s.length()==0 && t.length() == 0) return true;
    int index = 0;
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) == t.charAt(index)){
            //因為0已經找到,所以下面從1開始
            index = 1;
            for (int j = index; j < t.length(); j++) {
                //找得到就index++,找不到退出迴圈繼續找
                if (t.charAt(index) == s.charAt(j+i)) index++;else break;
                //如果index已經等於t.length(),就返回true
                if(index == t.length()) return true;
            }
            //初始化,重頭開始找
            index = 0;
        }
    }
    return false;
}

相關文章