// 选出两个字符串中首个最大的重复字符串 public String MaxRepeatStr(String str1,String str2){ String longStr = ""; String shortStr = ""; if(str1.length() <= str2.length()){ shortStr = str1; longStr = str2; } else{ shortStr = str2; longStr = str1; } int i = shortStr.length(); int j = 0; while(i>0){ for(int k = 0;k<=j;k++){ if (longStr.indexOf(shortStr.substring(k, i+k)) >= 0){ System.out.println("Has max String is " + shortStr.substring(k, i+k)); return shortStr.substring(k, i+k); } } i--; j++; } System.out.println("Didn't Has max String."); return ""; } //优化版 // 选出两个字符串中最大的重复字符串以及出现的次数 public Map MaxAllRepeatStr(String str1,String str2){ Map<String,Integer> map = new HashMap<>(); String longStr = ""; String shortStr = ""; if(str1.length() <= str2.length()){ shortStr = str1; longStr = str2; } else{ shortStr = str2; longStr = str1; } int i = shortStr.length(); int j = 0; boolean hasflag = false; while(i>0){ for(int k = 0;k<=j;k++){ //在for循环里,i是不变的,是本次循环中取得字符串长度 // i+k == endIndex if (longStr.indexOf(shortStr.substring(k, i+k)) >= 0){ if(map.get(shortStr.substring(k, i+k)) != null){ map.put(shortStr.substring(k, i+k), map.get(shortStr.substring(k, i+k)) + 1); } else{ map.put(shortStr.substring(k, i+k), 1); } hasflag = true; } } if(hasflag){ return map; } i--; j++; } System.out.println("Didn't Has max String."); return map; }