题目地址: http://ac.jobdu.com/problem.php?pid=1535
题目描述:
给定两个字符串,求它们前后重叠的最长子串的长度,比如"abcde"和“cdefg”是"cde",长度为3。
输入:
输入可能包含多个测试案例。
对于每个测试案例只有一行, 包含两个字符串。字符串长度不超过1000000,仅包含字符'a'-'z'。
输出:
对应每个测试案例,输出它们前后重叠的最长子串的长度。
样例输入:
abcde cdefg
样例输出:
3
【解题思路】
比较A和B的长度。
A如果大于B,就从len(a)-len(b)处遍历字符串A。
比较是否相同即可。
题目描述:
给定两个字符串,求它们前后重叠的最长子串的长度,比如"abcde"和“cdefg”是"cde",长度为3。
输入:
输入可能包含多个测试案例。
对于每个测试案例只有一行, 包含两个字符串。字符串长度不超过1000000,仅包含字符'a'-'z'。
输出:
对应每个测试案例,输出它们前后重叠的最长子串的长度。
样例输入:
abcde cdefg
样例输出:
3
【解题思路】
比较A和B的长度。
A如果大于B,就从len(a)-len(b)处遍历字符串A。
比较是否相同即可。
Java AC
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
public class Main {
/*
* 1535
*/
public static void main(String[] args) throws Exception {
StreamTokenizer st = new StreamTokenizer(
new BufferedReader(new InputStreamReader(System.in)));
while (st.nextToken() != StreamTokenizer.TT_EOF) {
String a = st.sval;
st.nextToken();
String b = st.sval;
int len1 = a.length();
int len2 = b.length();
int maxLen = 0;
int i = 0;
if (len1 >= len2) {
int start = len1 - len2;
i = start;
}
for (; i < len1; i++) {
int tempLen = len1 - i;
String tempA = a.substring(i);
String tempB = b.substring(0 ,tempLen);
if (tempA.equals(tempB)) {
if (tempLen > maxLen) {
maxLen = tempLen;
break;
}
}
}
System.out.println(maxLen);
}
}
}
/**************************************************************
Problem: 1535
User: wangzhenqing
Language: Java
Result: Accepted
Time:2280 ms
Memory:117432 kb
****************************************************************/