public class interview6 { /** * 用java写一个最长子串,有一个字符串,不定长,比如abcdbafedcabcmonabcd, * 写一个方法要找出给定字符串的最长子串,最长子串是连续的不重复的字符串,返回长度(7) */ @Test public void test(){ String str="abcdbafedcabcmonabcd"; int left=0; int maxlength=0; Map<String,Integer> substrs=new HashMap<>(); StringBuilder sb=new StringBuilder(); Map<Character,Integer> map=new HashMap<>(); for(int right=0;right<str.length();right++){ char x=str.charAt(right); if(map.containsKey(x)){ left=Math.max(left,map.get(x)+1); String s = sb.toString(); substrs.put(s,maxlength); sb=new StringBuilder(s.substring(s.indexOf(x)+1)); } map.put(x,right); sb.append(x); maxlength=Math.max(maxlength,right+1-left); } substrs.put(sb.toString(),maxlength); System.out.println("最大不重复子串长度为:"+maxlength); Set<String> keySet = substrs.keySet(); Iterator iterator=keySet.iterator(); while (iterator.hasNext()){ Object key = iterator.next(); int value=substrs.get(key); System.out.println(key+"--->"+value); } } } //结果: // 最大不重复子串长度为:7 // cdb--->4 // cdbafe--->6 // monabcd--->7 // fedcab--->6 // abcmon--->6 // bafed--->6 // bcmona--->6 // cmonab--->6 // monabc--->6 // bafedc--->6 // abcd--->4 // fedca--->6