找出两个字符串中的最大子串:例s1="asdafghjka", s2="aaasdfg" 他们的最大子串为"asd"
这个题类似与字符串匹配的问题,首先因想到用长的字符串判断是否包含短的字符串
高效的做法是:依次把短的字符串的长度递减,找出短的字符串的子字符串,这样就大大提高了效率
减少了比较的次数。
例:1.短的长度为 0~s2.lengh() 与长的判断一次(判断是否包含);
2..短的长度为 0~s2.lengh()-1 与长的判断两次(有两个长度为s2.lengh()-1在短的字符串中)
3..短的长度为 0~s2.lengh()-2 与长的判断三次;
4..短的长度为 0~s2.lengh()-3 与长的判断四次;
所以应写出把短的字符串遍历的代码;通过以上规律即可写出:
for(int x=0; x<min.length(); x++){
for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++){
String temp = min.substring(y,z);
System.out.println(temp);
}
}
对于该题来说只要在找出短的子串中判断是否包含在长的字符串中即可。
注意:是遍历出短的字符串,然后在用的长的判断是否包含。
完整代码:
public class Stringtest {
public static void main(String[] args) {
System.out.println(text("asdafghjka","aaasdfg"));
}
public static String text(String s1,String s2) {
String max="";String min="";
max=(s1.length()>s2.length())?s1:s2;
min=(max==s1)?s2:s1;
for(int x=0;x<min.length();x++){
for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++){
String temp=min.substring(y, z);
if(max.contains(temp)) return temp;
}
}
return null;
}
}