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