g0601_0700.s0686_repeated_string_match.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0601_0700.s0686_repeated_string_match;
// #Medium #String #String_Matching #2022_03_22_Time_7_ms_(94.56%)_Space_42.3_MB_(71.11%)
/**
* 686 - Repeated String Match\.
*
* Medium
*
* Given two strings `a` and `b`, return _the minimum number of times you should repeat string_ `a` _so that string_ `b` _is a substring of it_. If it is impossible for `b` to be a substring of `a` after repeating it, return `-1`.
*
* **Notice:** string `"abc"` repeated 0 times is `""`, repeated 1 time is `"abc"` and repeated 2 times is `"abcabc"`.
*
* **Example 1:**
*
* **Input:** a = "abcd", b = "cdabcdab"
*
* **Output:** 3
*
* **Explanation:** We return 3 because by repeating a three times "ab**cdabcdab**cd", b is a substring of it.
*
* **Example 2:**
*
* **Input:** a = "a", b = "aa"
*
* **Output:** 2
*
* **Constraints:**
*
* * 1 <= a.length, b.length <= 104
* * `a` and `b` consist of lowercase English letters.
**/
public class Solution {
public int repeatedStringMatch(String a, String b) {
char[] existsChar = new char[127];
for (char chA : a.toCharArray()) {
existsChar[chA] = 1;
}
for (char chB : b.toCharArray()) {
if (existsChar[chB] < 1) {
return -1;
}
}
int lenB = b.length() - 1;
StringBuilder sb = new StringBuilder(a);
int lenSbA = sb.length() - 1;
int repeatCount = 1;
while (lenSbA < lenB) {
sb.append(a);
repeatCount++;
lenSbA = sb.length() - 1;
}
if (!isFound(sb, b)) {
sb.append(a);
repeatCount++;
return !isFound(sb, b) ? -1 : repeatCount;
}
return repeatCount;
}
private boolean isFound(StringBuilder a, String b) {
for (int i = 0; i < a.length(); i++) {
int k = i;
int m = 0;
while (k < a.length() && m < b.length()) {
if (a.charAt(k) != b.charAt(m)) {
break;
} else {
k++;
m++;
}
}
if (m == b.length()) {
return true;
}
}
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy