版权声明:中华人民共和国持有版权 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"));
}
}