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

关于 java中 求两个字符串中最大的公共子串之引发对return的用法探讨

2016-05-20 09:34 441 查看
问题:求两个字符串中最大的公共子串;

思路:

1.判断短的那个字符串在不在长的字符串里;

2.如果不在,然后对短的字符串依次进行递减操作,然后再判断在不在长的字符串里;

3.递减的时候注意: 比如要求 "abcdef" 和 "abaacdef"最大公共子川,那么abcdef整个不在后者里面,那么接下来abcdef减掉一个,就是abcde或者bcdef,只有这样才能避免漏 掉。然后依次递减,找到规律:减掉一个时候有两种情况,减掉两个时候,有三种情况……

看一下代码:

class Demo

{

public static String get(String str1,String str2)

{

int len1=str1.length();

int len2=str2.length();

String max="",min="";

max=(len1>=len2) ? str1:str2;

min=(max==str1) ? str2:str1;

System.out.println("max="+max+" min="+min);

for ( int a=0;a<min.length();a++ )

{

for (int x=0,y=min.length()-a;x<=a;x++,y++ )

{

if (max.contains( min.substring(x,y)))

{

return min.substring(x,y); //return作用是返回值并退出方法;

}

}

}

return"zyf"; //上面for里面不是有return 语句了吗?为啥这里多此一举呢,这是因为for语句未必会执行,也即意味着for里 // 的return 语句未必会执行,那么假如没有return
“zyf”,那么get()方法就有可能没有返回值,所以编译就 // 会报错。同理在if语句里也是这样的,只有if(){return……}或者只有if(){return……} else if(){return……}


//编译就会报错,改进措施:1.就像本例一样,再加一个return; 2.使用 if else组合,或者if elseif else组 //合,目的都是确保至少有一个return肯定会执行到。

}

public static void main(String[] args)

{

String str1 = "abce1af";

String str2 = "abce1ffaaaaaaf";

System.out.println(get(str1,str2));

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: