找出两个字符串中最大的相同子字符串
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字符串处理详细说明:点击打开查看
找出给定的一个字符串中最大的不重复子串,不重复子串即一个子串中不出现两个相同的字符
思路一:先找出一个字符串中所有子串,再找出所有子串中最长的那一个;
思路二:每次找出的子串长度都比上一次的子串长,则最后的子串即是最长子串的长度数。
我选择的是第二种方法。
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;
}
}
以上是关于找出两个字符串中最大的相同子字符串的主要内容,如果未能解决你的问题,请参考以下文章
找出给定的一个字符串中最大的不重复子串,不重复子串即一个子串中不出现两个相同的字符