黑马程序员技术交流社区
标题:
高手啊 碰见个难题 没思路 求帮忙
[打印本页]
作者:
巩彪
时间:
2012-8-18 00:59
标题:
高手啊 碰见个难题 没思路 求帮忙
就是说 两个字符串的最大相同子串。
比如:
"sadabcdfghjkl"
"werabcdtyu"
作者:
王健
时间:
2012-8-18 01:08
package com.itcast.string;
/*
需求:两个字符串的最大相同子串。
分析:
在长串里面直接查找短串,如果查到了,那么短串就是这两个串的最大子串。
如果没查到,怎么办呢?
接下来,把短串截取,然后再在长串里面查,如果有就是最大子串。
假如用户不知道哪个是长串,哪个是短串,怎么办?
*/
public class StringTest {
/**
* @param args
*/
public static void main(String[] args) {
String maxString = "sadabcdfghjkl";
String minString = "werabcdtyu";
System.out.println(getMaxSubString(maxString, minString));
}
public static String getMaxSubString(String maxString, String minString) {
for (int x = 0; x < minString.length(); x++) {
for (int start = 0, end = minString.length() - x; end <= minString
.length(); start++, end++) {
// 小串的变换
String temp = minString.substring(start, end);
if (maxString.contains(temp)) {
return temp;
}
}
}
return null;
}
}
作者:
马林康
时间:
2012-8-18 01:12
public class StringDemo2 {
public static void main(String[] args){
String str1 = "avdkfahellosjks";
String str2 = "ewavdrhellotte";
System.out.println(commonMaxSubstring(str1, str2));
}
public static String commonMaxSubstring(String str1,String str2){
int len = str1.length();
String str3 = null;
outer:
//i为子串的长度
for(int i = len;i>0;i--){
//j为子串的脚标
for(int j=0;j<len-i+1;j++){
str3=str1.substring(j,j+i);
if(str2.contains(str3))
break outer;
}
}
return str3;
}
}
{:soso_e100:}
作者:
李知伦
时间:
2012-8-18 01:53
论坛有很多类似帖,最好先搜索一下
这种方法缺点是只从左到右比较, 取得第一次遇到的最大相同字符串
public class test {
public static void main(String[] args) {
System.out.println(getMaxSubString(s1,s2));
}
public static String getMaxSubString(String s1, String s2) {
String max, min;
max = s1.length() > s2.length() ? s1 : s2;
min = s1.length() <= s2.length() ? s1 : s2;//这个min 跟max 是为了判断获取的2个字符串 把长的赋值给max短的赋值给min 减少比较次数
for(int x=0; x<min.length(); x++){
for(int y=0,z=min.length()-x; z<=min.length(); y++,z++){//先比较整个的min字符 也就是0角标到min.length()角标
String temp = min.substring(y,z); //第二次是min.length-1个字符来比较 也就是werabcdty erabcdtyu
if(max.contains(temp)){ //第三次是min.length-2个字符来比较 也就是werabcdt erabcdty rabcdtyu 以此类推的...
return temp;
}
}
}
return null;
}
}
复制代码
下面这段代码提供了,可计最大相同子串出现次数,同样也有如有两个不同子串长度最大且相等的时候,输出结果取决于entrySet()取出的映射
import java.util.HashMap;
import java.util.Map;
public class test {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
String s1 = "cdefsadabcdfghjcdefkl";
String s2 = "cdefghjwerabcdtyucdef";
for (int i = 0; i < s2.length(); i++) {
for (int j = i + 1; j <= s2.length(); j++) {
String key = s2.substring(i, j);
if (s1.contains(key)) {
if (map.containsKey(key)) {
map.put(key, map.get(key) + 1);
} else {
map.put(key, 1);
}
}
}
}
int maxValue = 0;
String maxKey = "";
for (Map.Entry<String, Integer> m : map.entrySet()) {
if (m.getKey().length()> maxKey.length()) {
maxValue = m.getValue();
maxKey = m.getKey();
}
}
System.out.println("最大的重复子串为:"+maxKey+" 出现次数为:"+maxValue);
}
}
复制代码
作者:
牛杨
时间:
2012-8-18 02:09
兄弟你 看视频了么? 老毕讲的有啊,不会是刷分的吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2