我有最长子串长度的代码,但我不确定" else"以下代码的一部分。 此外,变量从这里开始表示??
while(start < i && s.charAt(start)!=c){
set.remove(s.charAt(start));
start++;
}
start++;
完整的方法代码:
public static int lengthOfLongestSubstring(String s) {
if(s==null || s.length()==0)
return 0;
HashSet<Character> set = new HashSet<Character>();
int max=0;
int i=0;
int start=0;
while(i < s.length()){
char c = s.charAt(i);
if(!set.contains(c)){
set.add(c);
}else{
max = Math.max(max, set.size());
while(start < i && s.charAt(start)!=c){
set.remove(s.charAt(start));
start++;
}
start++;
}
i++;
}
max = Math.max(max, set.size());
return max;
}
答案 0 :(得分:1)
问题要求子字符串中每个字符唯一的最长子字符串。这个问题要求描述else块的作用,以及描述start。要进行描述,请考虑字符串 abcdbfg 。
start = 0; //指向唯一子字符串
中第一个字符的指针构建该集,直到有重复的字母。当你到达abcdb时会发生这种情况。此时,该集合包含'a','b','c','d'。 (最大长度= 4)。
此时,您需要记录max(4),并将'start'指针移过第一个重复的字母('b')。你这样做是因为剩下的是一个独特子串的新可能性。在此期间,您将删除前导字符'a','b'。该集合现在将包含'b','c','d'和'c'的起点。
您继续构建'c','d','b',直到找到另一个重复的字母,然后重复直到字符串完成。在此示例中,字符串继续为'cdbfg',答案为5。