package trial;
public class Trial {
public static void main(String[] args){
System.out.println(longestSubsequence("cotton buds","albino spider"));
}
public static int longestSubsequence(String s1,String s2){
//特殊情况1:s1 s2对象不存在,null代表堆内存中根本没有这个东西
if (s1 == null || s2 == null){
return 0;
}
//特殊情况2:s1 s2是长度为0的字符串
if(s1.equals("") || s2.equals("")){
return 0;
}
//定义较长字符串和较短字符串
String max = (s1.length() > s2.length()) ? s1:s2;
String min = (s1.length() < s2.length()) ? s1:s2;
//下面专注于较短的字符串,假设其长度为n,依次找到它的长度为n, n-1, n-2....1的子串,
//若另外那个较长的字符串包含了较短字符串的某个子串,则找到了二者的最长公共子串。
//遍历较短字符串
for(int i = 0; i<min.length();i++){
/*依此减少较短字符串的字符数量
当i=0时,begin = 0,end = 短字符长度,即n,
begin++和end++代表着,第二步从1到n+1,但是由于end<=min.length()这个条件,所以第二步实际上是1到n索引的子串
当i=1时,begin = 0,end = n-1,current字符串就是,先是0到n-1的子串,然后是1到n索引的子串,如此往下
当i=2时,begin = 0,end = n-2,current字符串就是,先是0到n-2的子串,然后是1到n-1的子串,如此往下
*/
for(int begin = 0, end = min.length()-i; end <= min.length(); begin++, end++){
String current = min.substring(begin,end);
//判断较长字符串是否包含较短字符串的子串的元素,如果包含则返回true
if(max.contains(current)){
return current.length();
}
}
}
return 0;
}
}
java-输出最长字符串的长度
最新推荐文章于 2023-09-06 02:09:14 发布