您的位置:首页 > 编程语言 > Java开发

LeetCode -- Google -- Interview Process. 1. Repeated String Match(java)

2018-01-13 14:36 423 查看
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.

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”).

Note:

The length of A and B will be between 1 and 10000.

思路:首先判断s和t的长度,1. 如果s.length >= t.length, 那么就看s中有没有包含t,如果包含了,则返回1,如果没包含,s最多重复一次就可以看出包含关系,重复后包含则返回2,不包含则返回-1;2. 如果s.length < t.length,重复s足够多次(h次),如果s包含t, 则返回重复的次数,如果s不包含t,则返回-1,至于h的取值,取决于s的首尾的情况,如果s中重复的t的字段以外,首尾有多余的则重复次数+2,首尾有一方多余的+1,首尾都不多余为t重复的次数。

public int repeatedStringMatch(String A, String B) {
String s = A, t = B;
int sl = s.length(), tl = t.length();
if (sl == 0 || tl == 0) return -1;
if (sl < tl) {
int index = t.indexOf(s), j = sl - 1, h = 0;
if (index > 0) {
if (!t.substring(tl - sl).equals(s)){
h = (tl - index) / sl + 2;
} else {
h = (tl - index) / sl + 1;
}
}else {
if (tl % sl != 0) {
h = tl / sl + 1;
} else {
h = tl / sl;
}
}
String str = "";
for (int i = 0; i < h; i++) {
str += s;
}
if (str.indexOf(t) == -1) return -1;
else return h;

} else {
if (s.indexOf(t) != -1) return 1;
String repeat = s + s;
if (repeat.indexOf(t) == -1) return -1;
else return 2;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string java leetcode 谷歌