Given two strings A and B, find the minimum number of times A has to be repeated such that B is a substring of it. If no such solution, return -1.
- A, B 2개의 문자열을 받고 최소 횟수로 반복하여 B 문자열이 A에 포함되는지 확인(포함되지 않으면 -1 반환)
example
For example, with A = "abcd" and B = "cdabcdab".
Return 3, because by repeating A three times (“abcdabcdabcd”), B is a substring of it; and B is not a substring of A repeated two times ("abcdabcd").
- cdabcdab 문자열이 포함되려면 A 문자열은 abcdabcdabcd 3번 반복되어야 하므로 3을 반환
Note:
The length of A and B will be between 1 and 10000.
Input:
"aaaaaaaaaaaaaaaaaaaaaab"
"ba"
Output:
-1
Expected:
2
// 초기코드
/**
* @param {string} A
* @param {string} B
* @return {number}
*/
var repeatedStringMatch = function(A, B) {
};
var repeatedStringMatch = function(A, B) {
let targetString = '';
let repeatCount = 0;
while(targetString.length <= (A.length + B.length)) {
repeatCount++;
targetString = A.repeat(repeatCount);
if(targetString.includes(B)) {
return repeatCount;
}
}
return -1;
};
var repeatedStringMatch = function(A, B) {
if(B.includes(A) && A.length === B.length) {
return 1;
}
if(A.includes(B)) {
return 1;
}
let aHash = 0;
let bHash = 0;
A.split('').reverse().forEach((char, index) => {
aHash += char.charCodeAt() * Math.pow(2, index);
});
B.split('').reverse().forEach((char, index) => {
bHash += char.charCodeAt() * Math.pow(2, index);
});
if(aHash > bHash) {
for(let i=0; i < A.length; i++) {
const subString = A.substring(i, i + B.length);
if(B.length != subString.length) {
return -1;
}
let hashValue = 0;
subString.split('').reverse().forEach((char, index) => {
hashValue += char.charCodeAt() * Math.pow(2, index);
});
if(bHash === hashValue){
break;
}
}
} else {
for(let i=0; i < B.length; i++) {
const subString = B.substring(i, i + A.length);
if(A.length != subString.length) {
return -1;
}
let hashValue = 0;
subString.split('').reverse().forEach((char, index) => {
hashValue += char.charCodeAt() * Math.pow(2, index);
});
if(aHash === hashValue){
break;
}
}
}
let repeatCount = 1;
let tempA = A;
while(true) {
if(tempA.includes(B, 0)) {
return repeatCount;
} else {
repeatCount++;
tempA = A.repeat(repeatCount);
}
}
};
aa = 291 이다.
ba = 293 이다.