题目:
给定两个字符串,找出两个字符串的最大相同子串
注:substring(beginIndex,endIndex):子串的结束位置是开区间,也就是不包含这个位置的字符!!!
比如:str1 = “abcwerthelloyuiodefabcdef”;str2 = “cvhellobnm”
提示:将短的那个串进行长度依次递减的子串与较长的串比较。
思路:
将最小子串依次递减和最长的串进行比较,每次递减1位,然后对递减1位后的字符串进行左右移动对比;如果没有相同子串则继续往下递减1位。难点在于,如何左右移动比较。
public String getMaxSameString(String str1,String str2){
if(str1 == null || str2 == null) return new String("抱歉!没有相同子串");
String maxStr = (str1.length()>str2.length())?str1:str2;
String minStr = (str1.length()>str2.length())?str2:str1;
int length = minStr.length();
for(int i= 0;i<length;i++){
for(int x= 0, y=length-i;y<=length;x++,y++){
String subStr = minStr.substring(x,y);
if(maxStr.contains(subStr)){
return subStr;
}
}
}
return null;
}
测试:
public static void main(String[] args) {
String str1 = "abcwerthelloyuiodefabcdef";
String str2 = "cvhellobnm";
Test test = new Test();
String maxSameString = test.getMaxSameString(str1, str2);
System.out.println("最大相同子字符串为:"+maxSameString);
}
输出结果:
最大相同子字符串为:hello
类似的题目还有比如最大相同子串不止一个时,找出相同子串