提供一个字符串,计算最长不包含重复字母的子字符串的长度:例如"abcabcbb" 最长没有重复字母的子串是"abc",长度为3,"bbbbb"最长的没有重复字母的子串是1;
思路是:
将字符串转换成字符数组,然后逐一添加到list中,如果list包含了这个字符,求此时的list长度,如果,大于之前的子串的长度,将最大长度设置为此子串的长度,并且返回
public class Solution2 {
public int lengthOfLongestSubstring(String s) {
if (s.length() == 0) {
return 0;
}
if (s.length() == 1) {
return 1;
}
List<Character> list=new ArrayList<Character>();
int Max=1;
char []temp=s.toCharArray();
for(int i=0;i<temp.length;i++){
if(list.contains(temp[i]))
{
int temp1=list.size();
Max=Max>=temp1?Max:temp1;
int index=list.indexOf(temp[i]);
list=list.subList(index+1,list.size());//剔除包括此字母前面的所有字母。只要从这个字母之后的所有字母
}
list.add(temp[i]);
}
if(list.size()>Max)//我犯的错误之一:子串位于最后没有,就不能进入上面的if条件,所以长度就是此时子串的长度:例如ababcd,才能返回4,否则是2
return list.size();
return Max;
}
public static void main(String[] args) {
Solution2 s = new Solution2();
int k = s
.lengthOfLongestSubstring("qopubjguxhxdipfzwswybgfylqvjzhar");
int d = s
.lengthOfLongestSubstring("ababcd");
System.out.println(k);
System.out.println(d);
}
}