随笔-重复叠加字符串匹配

版权声明:中华人民共和国持有版权 https://blog.csdn.net/Fly_Fly_Zhang/article/details/85009658

题目:

给定两个字符串 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"));
    }
    }

猜你喜欢

转载自blog.csdn.net/Fly_Fly_Zhang/article/details/85009658