50,549
社区成员
发帖
与我相关
我的任务
分享
public static void main(String[] arg) {
String str = "ertyertyabcdabcdsdf464132132146464165479lhkjhnkjgibkjbjljdslfsajdlasdf4asdf5a7e";
int count = 2;
List<String> maxLengthList = new ArrayList<String>();
maxLengthList = fetchMaxLeString(str, count, maxLengthList);
System.out.println(maxLengthList);
StringBuilder sbBuilder = new StringBuilder();
if (maxLengthList.isEmpty()) {
System.out.println("无重复并且长度大于2的子串!");
} else {
int maxLength = maxLengthList.get(0).length();
sbBuilder.append(maxLengthList.get(0)).append(",");
for (int i = 1; i < maxLengthList.size(); i++) {
if (maxLengthList.get(i).length() == maxLength) {
sbBuilder.append(maxLengthList.get(i)).append(",");
}
}
System.out.println("重复最长子串为:"
+ sbBuilder.toString().substring(0,
sbBuilder.toString().length() - 1));
}
}
public static List<String> fetchMaxLeString(String str, int count,
List<String> maxLengthList) {
if (count > str.length() / 2 + 1) {
return maxLengthList;
}
for (int i = 0; i < str.length() - count; i++) {
List<String> strList = new ArrayList<String>();
String regex = str.substring(i, i + count) + "+?";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
strList.add(matcher.group());
}
if (strList.size() > 1
&& !maxLengthList.contains(str.substring(i, i + count))) {
maxLengthList.add(str.substring(i, i + count));
}
}
count++;
if (count > str.length()) {
return maxLengthList;
}
fetchMaxLeString(str, count, maxLengthList);
Collections.sort(maxLengthList, new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
int length1 = o1.toString().length();
int length2 = o2.toString().length();
return length1 - length2 < 0 ? 1 : (length1 - length2 == 0 ? o1
.toString().compareTo(o2.toString()) : -1);
}
});
return maxLengthList;
}
public static void main(String[] arg) throws ParseException {
String str = "abcdabcdsdf";
int startindex = 0;
int count = 2;
List<String> maxLengthList = new ArrayList<String>();
maxLengthList = fetchMaxLeString(str.substring(0, count), str,startindex, count, maxLengthList);
System.out.println(maxLengthList);
StringBuilder sbBuilder = new StringBuilder();
if (maxLengthList.isEmpty()) {
System.out.println("无重复并且长度大于2的子串!");
} else {
int maxLength = maxLengthList.get(0).length();
sbBuilder.append(maxLengthList.get(0)).append(",");
for (int i = 1; i < maxLengthList.size(); i++) {
if (maxLengthList.get(i).length() == maxLength) {
sbBuilder.append(maxLengthList.get(i)).append(",");
}
}
System.out.println("重复最长子串为:"+ sbBuilder.toString().substring(0,sbBuilder.toString().length() - 1));
}
}
public static List<String> fetchMaxLeString(String str1, String str,
int startindex, int count, List<String> maxLengthList) {
startindex++;
if (count > str.length() / 2 + 1) {
return maxLengthList;
}
List<String> strList = new ArrayList<String>();
String regex = str1 + "+?";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
strList.add(matcher.group());
}
if (strList.size() > 1 && !maxLengthList.contains(str1)) {
maxLengthList.add(str1);
}
int endIndex = startindex + count;
if (endIndex > str.length()) {
return maxLengthList;
}
fetchMaxLeString(str.substring(startindex, endIndex), str, startindex,
count, maxLengthList);
count++;
if (count > str.length()) {
return maxLengthList;
}
fetchMaxLeString(str.substring(0, count), str, startindex, count,
maxLengthList);
Collections.sort(maxLengthList, new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
int length1 = o1.toString().length();
int length2 = o2.toString().length();
return length1 - length2 < 0 ? 1 : (length1 - length2 == 0 ? o1.toString().compareTo(o2.toString()) : -1);
}
});
return maxLengthList;
}
private static boolean isHasSubString(String str) {
for (int i = 0; i < str.length() -1; i++) {
if(str.indexOf(str.substring(i, i+2)) != str.lastIndexOf(str.substring(i, i+2))){
return true;
}
}
return false;
}
public static void main(String[] arg) throws ParseException {
String str = "abab";
int startindex = 0;
int count = 2;
System.out.println(isHave(str.substring(0, count), str, startindex,
count));
}
public static boolean isHave(String str1, String str, int startindex,
int count) {
boolean isHave = false;
++startindex;
if (count > str.length() / 2 + 1) {
return isHave;
}
List<String> strList = new ArrayList<String>();
String regex = str1 + "+?";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
strList.add(matcher.group(0));
}
if (strList.size() > 1) {
isHave = true;
} else if (!str.endsWith(str1)) {
int endIndex = startindex + count;
if (endIndex > str.length()) {
return isHave;
}
isHave = isHave(str.substring(startindex, endIndex), str,
startindex, count);
} else {
++count;
isHave = isHave(str.substring(0, count), str, startindex, count);
}
return isHave;
}
你这里是要示真假,所以你这长度大于2是没有意义的,大于2的都有的话等于2肯定有的了,这样理解的话我这代码还可以简化,又考虑到可能要求出最长匹配的字符串,所以我就不去了 String str = "abcdab";
// 计算java的个数
int length = str.length() - str.replaceAll("ab", "").length();
System.out.println(length / 2);//2是ab大小
复杂的方法,java提供了好像有个StringTokenizer类。