1. 程式人生 > >隨筆-重複疊加字串匹配

隨筆-重複疊加字串匹配

題目:

給定兩個字串 A 和 B, 尋找重複疊加字串A的最小次數,使得字串B成為疊加後的字串A的子串,如果不存在則返回 -1。

舉個例子,A = “abcd”,B = “cdabcdab”。

答案為 3, 因為 A 重複疊加三遍後為 “abcdabcdabcd”,此時 B 是其子串;A 重複疊加兩遍後為"abcdabcd",B 並不是其子串。

注意:

A 與 B 字串的長度在1和10000區間範圍內。

思路:題幹是A擴大n 倍後是B的主串,那麼我們直接將A當成主串與B進行匹配;當個A匹配完A.length()以後 ,接下來A和B的值肯定是相等的,如果不相等,那麼說明B不是A的字串;

/**
 * @Created with IntelliJ IDEA
 * @Description:
 * @Package: PACKAGE_NAME
 * @author: FLy-Fly-Zhang
 * @Date: 2018/12/14
 * @Time: 21:04
 */
public class Demo {

        public static  int repeatedStringMatch(String A, String B) {
            int j=0;
            int i=0;
            boolean bl=true;
            while(j<B.length()){
                if(A.charAt(i%A.length())==B.charAt(j)){
                    i++;
                    j++;
                }else{
                    if(bl==false){
                        return -1;
                    }
                    i++;
                }
                if(i==A.length()){
                    bl=false;
                }

            }
            if(i%A.length()==0){
                return i/A.length();
            }
            return i/A.length()+1;
        }

    public static void main(String[] args) {
        System.out.println(repeatedStringMatch("abac","abcabcabcabc"));
    }
    }