找出两个字符串中最大的相同子字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找出两个字符串中最大的相同子字符串相关的知识,希望对你有一定的参考价值。

参考技术A

// 找一个字符串的最大子串 public static void main(String[] args) String s1 = "qwerabcdtyuiop"; String s2 = "xcabcdvbn"; String stringMax = stringMax(s1, s2); System.out.println("最大的相同子字符串是:" + stringMax); /** * 找出两个字符串中最大的相同子字符串 * * @param s1 * @param s2 * @return */ private static String stringMax(String s1, String s2) // 记录相同子字符串 String sameString = null; // 比较两个字条串的长度,这里是设置S1的长度大于S2的长度 if (s1.length() < s2.length()) // 如果s2的长度大,那么就将两个字符串进行替换 String temp = s1; s1 = s2; s2 = temp; // 如果s2就被包含在s1中,那么这两个字符串最大的子串就是s2 boolean isContains = s1.contains(s2); if (isContains) return s2; else boolean b1 = false; // 如果s2不是两个字符串最大的子类,那么再进行循环查找 for (int i = 0; i < s2.length(); i++) for (int j = 0; j <= i; j++) // 获取每次进行比较的子字条串 String str = s2.substring(j, s2.length() - i + j); System.out.println("第" + i + "次比较:" + str); if (s1.contains(str)) sameString = str; b1 = true; break; // 如果比较到s2中最小的为2的时候还没有相同的字符串,我们就默认没相同的子字符串 if (s2.substring(0, s2.length() - i).length() == 2) System.out.println("没有相同的子字符串"); b1 = true; break; if (b1 == true) break; return sameString;



编译运行:



分析原理图:






String字符串处理详细说明:点击打开查看

参考技术B 这个是使用什么语言来写?

找出给定的一个字符串中最大的不重复子串,不重复子串即一个子串中不出现两个相同的字符

思路一:先找出一个字符串中所有子串,再找出所有子串中最长的那一个;
思路二:每次找出的子串长度都比上一次的子串长,则最后的子串即是最长子串的长度数。
我选择的是第二种方法。

public class FindSubstringMaxlengthNoduplicate {
  public static void main(String[] args) {
  String s = "adcdghcwioizhfksjdyuiodfhjskhgkhgeisdcjdkh";
  ArrayList<String> result = findMaxLength(s);
  int maxLength = result.get(result.size()-1).length();
  System.out.println("最长不重复子串为:");
  for(String r : result){
    if(r.length() == maxLength){
      System.out.println(r);
    }
  }
}

private static ArrayList<String> findMaxLength(String s) {
  int maxLength = 0;
  HashSet<Character> hs = null;
  ArrayList<String> list = new ArrayList<String>();
  for(int j = 0; j < s.length(); ++j){
    int count = 0;
    hs = new HashSet<Character>();
    for(int i = j; i < s.length(); ++i){
      if(hs.add(s.charAt(i))){
        ++count;
        if(count == s.length()-j){
           if(count >= maxLength){
              maxLength = count;
              list.add(s.substring(j,i));
           }
           j = s.length();
        }
      }else{
        if(count >= maxLength){
          maxLength = count;
          list.add(s.substring(j,i));
        }
        int numOfDupllicate = 0;
        for(int k = j; k < i; ++k){
          if(s.charAt(i) != s.charAt(k)){
            ++numOfDupllicate;
          }else{
            break;
          }
        }
        j = j+numOfDupllicate;
        break;
        }
      }
    }
    return list;
  }

}

以上是关于找出两个字符串中最大的相同子字符串的主要内容,如果未能解决你的问题,请参考以下文章

找出给定的一个字符串中最大的不重复子串,不重复子串即一个子串中不出现两个相同的字符

请帮忙///如何计算两个 字符串的最长公共子串

华为OD机试真题Java实现找出符合要求的字符串子串真题+解题思路+代码(2022&2023)

从两个字符串中找出最大公共子字符串

求两个输入的字符串的最长公共子串

输入一串字符,找到相同且最长的字符串