题目见:https://leetcode.com/problemset/all/
3. Longest Substring Without Repeating Characters
题目很容易明白,大串中取最大子串,并返回最大子串的长度。
直观做法就是比较字符是否重复,故将String-->char[], 遍历每个字符,将遍历到的字符存入集合,在存入集合时判断集合中是否已经存在了当前操作的字符,若没有则直接存入,若有则说明子串此处会出现重复。接下来记录当前集合中子串的长度,再将当前集合中当前相同字符及之前的字符全部从集合中删除,删除操作结束后将当前字符存入集合,更新集合大小变量,循环。。。
友情提示:删除操作注意集合索引变量的变化。。。
源代码:
char[] ch = s.toCharArray();
int max = 0;
int num = 0;
ArrayList<Character> chAL = new ArrayList<Character>();
for(int i=0;i<ch.length;i++){
if(!chAL.contains(ch[i])){
chAL.add(ch[i]);
num++;
}
else{
if(num > max) max = num;
for(int j=0;j<chAL.size();j++){
if(chAL.get(j) == ch[i]){
chAL.remove(j);
break;
}else
chAL.remove(j--);
}
chAL.add(ch[i]);
num = chAL.size();
}
}
return num > max ? num : max;
代码参考:http://www.cnblogs.com/grandyang/p/4510984.html