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

求两个字符串的最大公共子串

2015-06-06 11:33 495 查看
/*

 * 看了点字符串的内容,写一下求两个字符串的最大公共子串的练习,

 * 

 * 题目要求:获得两个字符串的最大公共子串

 * 如:s1 = "asjkjktehellogjejava";

 *  s2 = "sjjtjjhello";

 * 返回   s = "hello";

 * 

 * 思路:为提高程序效率应选择对短的字符串进行操作,每次比较如未获得结果则将短的字符串长度减一以进行后续比较

 * 

 * @author up淡然

 */

package stringdemo;

public class MaxSubString {

//求最大子串的方法
public static String maxSubString(String s1, String s2) {
//将s1,s2按照长度进行调序,s1为长串s2为短串
String max = (s1.length() > s2.length())? s1: s2;
String min = (max == s1)? s2: s1;

//所有可能的字符串的长度从0到短串的长度,从短串的最大串开始比较
for(int i = 0; i < min.length(); i++){
//每次比较从短串中可能的第一个子串开始比较,其中j++, k++用于移动可能子串的位置
for(int j = 0, k = min.length() - i; k != min.length(); j++, k++){
//将可能子串取出并进行比较,若得出结果则返回,否则程序返回null
String temp = min.substring(j, k + 1);
if(max.contains(temp))
return temp;
}
}
return null;

}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//分别定义两个用于寻找最大公共子串的字符串
String s1 = "sjjthello java!helloj";
String s2 = "asjkhello java!jktehellogjejava";

//定义简单的输出
System.out.println("s1 = \"" + s1 + "\"");
System.out.println("s2 = \"" + s2 + "\"");
//输出语句中直接实现方法调用
System.out.println("the max subString of s1 and s2 is:" + maxSubString(s1, s2));
}

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