Repeated String Match

medium string math

Problem

Smallest number of times you must repeat a so that b becomes a substring; -1 if impossible.

Inputa='abcd' b='cdabcdab'
Output3
'abcdabcdabcd' contains 'cdabcdab'.

def repeated_string_match(a, b):
    k = -(-len(b) // len(a)); s = a * k
    if b in s: return k
    if b in s + a: return k + 1
    return -1
function repeatedStringMatch(a, b) {
  let k = Math.ceil(b.length / a.length); let s = a.repeat(k);
  if (s.includes(b)) return k;
  if ((s + a).includes(b)) return k + 1;
  return -1;
}
int repeatedStringMatch(String a, String b) {
    int k = (b.length() + a.length() - 1) / a.length();
    StringBuilder s = new StringBuilder();
    for (int i = 0; i < k; i++) s.append(a);
    if (s.toString().contains(b)) return k;
    if (s.append(a).toString().contains(b)) return k + 1;
    return -1;
}
int repeatedStringMatch(string a, string b) {
    int k = (b.size() + a.size() - 1) / a.size(); string s;
    for (int i = 0; i < k; i++) s += a;
    if (s.find(b) != string::npos) return k;
    s += a; if (s.find(b) != string::npos) return k + 1;
    return -1;
}
Time: O((|a|+|b|)·k) Space: O(|a|·k)