黑马程序员技术交流社区
标题:
day15 String:小题解析及图解—两个字符串中最大相同的子串
[打印本页]
作者:
suiabing
时间:
2012-4-23 14:07
标题:
day15 String:小题解析及图解—两个字符串中最大相同的子串
无标题 (1).png
(57.18 KB, 下载次数: 15)
下载附件
maxSubString
2012-4-23 14:04 上传
仅供个人参考,欢迎讨论,也可到我的博客www.itcast.info讨论。为了目标奋斗着......
package suisuisui.day15;
/*
* 两个字符串中最大相同的子串。
* "qwerabcdtyuiop"
* "xcabcdvbn"
* 思路:首先我们用较短的字符串当做key值在较大的字符串中查找。
* 如果找到,则返回此串,
* 如果未找到,将key的长度减1,可以得到2个key,分别查找,找到即返回此串,未找到再次将key长度减一
* 依次遍历查找。直到找到为止。
* 注意:如果两个字符串其中一个为空,那么直接返回空。如果不做这个判断的话下面contains()会抛出异常要try一下
*
* contains
public boolean contains(CharSequence s)当且仅当此字符串包含指定的 char 值序列时,返回 true。
参数:
s - 要搜索的序列
返回:
如果此字符串包含 s,则返回 true,否则返回 false
抛出:
NullPointerException - 如果 s 为 null
从以下版本开始:
1.5
*
*/
class Test2{
public static void main(String[] args){
String str1 = "qwerabcdtyuiop";
String str2 = "xcabcdvbn";
System.out.println("最大相同字符串是: " + getMaxSame(str1,str2));
}
/**
* 获取最大子串
*
* @param str1
* @param str2
* @return
*/
public static String getMaxSame(String str1, String str2) {
if (str1==null || str2== null) //如果有一个字符串为空 返回空,结束函数
return null;
String max = str1.length()>str2.length()? str1 : str2;
String min = str1.length()<str2.length()? str1 : str2;
for (int i = 0; i < min.length(); i++) {
for (int startIndex = 0, endIndex = min.length()-i; endIndex <= min.length(); startIndex++, endIndex++) {
String sub = min.substring(startIndex, endIndex);//定义新的子串作为key,判断是否包含在内。
if(max.contains(sub))//如果包含子串
return sub;//返回找到的子串。这个就是最大的子串,不明白的看图吧。
}
}
return null;//如果没有找到相同字符串,返回空。
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2