leetcode 算法题686 (简单173) 重复叠加字符串匹配
- 题目介绍
给定两个字符串 A 和 B,
寻找重复叠加字符串A的最小次数,
使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1。
举个例子,A = "abcd",B = "cdabcdab"。
答案为 3, 因为 A 重复叠加三遍后为 “abcdabcdabcd”,
此时 B 是其子串;A 重复叠加两遍后为"abcdabcd",B 并不是其子串。
- 示例
A 与 B 字符串的长度在1和10000区间范围内。
- 解法一
/**
* @param {string} A
* @param {string} B
* @return {number}
*/
var repeatedStringMatch = function(A, B) {
if(A.indexOf(B) > -1) {
return 1;
}
let i = B.indexOf(A)
if(i === -1) {
if((A + A).indexOf(B) > -1) {
return 2;
}
return -1;
}
let count = (i > 0);
if(A.indexOf(B.substr(0, i)) === -1) {
return -1;
}
while (i < B.length) {
if(A.indexOf(B.substr(i, A.length)) !== 0) {
return -1;
}
count++;
i += A.length;
}
return count;
};
执行用时 : 64 ms, 在所有 JavaScript 提交中击败了98.97%的用户
内存消耗 : 34.6 MB, 在所有 JavaScript 提交中击败了69.44%的用户
- 解法二
/**
* @param {string} A
* @param {string} B
* @return {number}
*/
var repeatedStringMatch = function(A, B) {
let temp = A, count = 1;
while(temp.length < B.length){
temp += A;
count++;
}
if(temp.indexOf(B) === -1) {
temp += A;
count++;
return temp.indexOf(B) === -1 ? -1 : count;
}
return count;
};
执行用时 : 64 ms, 在所有 JavaScript 提交中击败了98.97%的用户
内存消耗 : 35.5 MB, 在所有 JavaScript 提交中击败了63.89%的用户