publicstaticbooleanmethod(String str){int len = str.length();if(len <6)returntrue;// 长度大于等于6int ziLen =0;// 所有可能重复子串的长度遍历。for(int i =3; i <= len /2; i++){
ziLen = i;int begin =0;int end = ziLen -1;// 包括
HashMap<String, Boolean> map =newHashMap<>();while(end <= len -1){
String sub = str.substring(begin, end +1);if(map.containsKey(sub)){returnfalse;}else{
map.put(sub,false);
begin++;
end++;}}}returntrue;}
这才是正确的做法。s.substring(i + 3).contains(s.substring(i, i + 3))。不会使AAAA被误判。
publicstaticbooleanmethod1(String s){for(int i =0; i < s.length()-3; i++){if(s.substring(i +3).contains(s.substring(i, i +3)))returnfalse;}returntrue;}
判断一个字符串是否有 长度大于2 的重复子串以下的三个例子都通过了测试,但是其实是测试用例有漏洞。没有类似含有AAAA的测试用例我的做法:(当然用set就可以了,不必用map,就不改了)你会发现我对比了很多子串的长度。其实是没有必要的。比如我对比出了有两个长度为5的子串重复。其实它一定有长度为3的部分重复。所以只需要保证没有长度为3的子串重复就行了。 public static boolean method(String str) { int len = str.le