子串查找(字符串匹配)

时间:2025-02-15 14:18:12
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; } }