要求:求两个字符串的最长公共子串,如“abcdefg”和“adefgwgeweg”的最长公共子串为“defg”(子串必须是连续的)
public class Main03{ // 求解两个字符号的最长公共子串 public static String maxSubstring(String strOne, String strTwo){ // 参数检查 if(strOne==null || strTwo == null){ return null; } if(strOne.equals("") || strTwo.equals("")){ return null; } // 二者中较长的字符串 String max = ""; // 二者中较短的字符串 String min = ""; if(strOne.length() < strTwo.length()){ max = strTwo; min = strOne; } else{ max = strTwo; min = strOne; } String current = ""; // 遍历较短的字符串,并依次减少短字符串的字符数量,判断长字符是否包含该子串 for(int i=0; i<min.length(); i++){ for(int begin=0, end=min.length()-i; end<=min.length(); begin++, end++){ current = min.substring(begin, end); if(max.contains(current)){ return current; } } } return null; } public static void main(String[] args) { String strOne = "abcdefg"; String strTwo = "adefgwgeweg"; String result = Main03.maxSubstring(strOne, strTwo); System.out.println(result); } }
总觉得这题,输出结果和题意不相符合,结果2,是不是把B序列翻转,求出两者最长公共子串