隨筆-重複疊加字串匹配
阿新 • • 發佈:2018-12-18
題目:
給定兩個字串 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")); } }