子串查找(字符串匹配)
package com.company;
/**
* @author xiesongzhuang1
* @Description 查找两个字符串的最大公共字串
* @createTime 2021年07月28日
*/
public class CharacterPlus {
public static void main(String[] args){
String a = "123456";
String b = "13452439";
String result=choose(a,b);
System.out.println(result);
}
/**
* 假设字符串 a 的长度为 n,字符串 b 的长度为 m,可见时间复杂度是 n 和 m 的函数。
* 首先,你需要对于字符串 a 和 b 找到第一个共同出现的字符,这跟前面讲到的匹配算法在主串中查找第一个模式串字符一样。
* 然后,一旦找到了第一个匹配的字符之后,就可以同时在 a 和 b 中继续匹配它后续的字符是否相等。
* 这样 a 和 b 中每个互相匹配的字串都会被访问一遍。
* 全局还要维护一个最长子串及其长度的变量,就可以完成了。
*/
public static String choose(String s1,String s2){
String maxSubStr = "";
int max_len = 0;
for(int i=0;i<s1.length();i++){
for (int j = 0; j <s2.length() ; j++) {
if(s1.charAt(i)==s2.charAt(j)){
for (int m = i,n=j; m <s1.length()&&n<s2.length(); m++,n++) {
if(s1.charAt(m)!=s2.charAt(n)){
break;
}
if(max_len<m-i+1){
max_len=m-i+1;
maxSubStr=s1.substring(i,m+1);
}
}
}
}
}
return maxSubStr;
}
}