难度不高~就是移动窗口,首先想如果没有重复的就是当前长度,如果有重复的就要是窗口右边减去窗口左边,窗口右边可以看成i一直在向前增大,左边只有尽可能左才求出来的最大,但是遇到与窗口右边重复的左边就要移动。然后不断改变统计窗口长度的变量,求最大的。
public int lengthOfLongestSubstring(String s) {
int start = 0;
int max = 0;
for (int i = 0; i < s.length(); i++) {
//i为窗口右边
start = findSame(s.charAt(i), start, i, s);
//start为左边
if (max < i + 1 - start) {
max = i + 1 - start;
}
}
return max;
}
public int findSame(char a, int start, int end, String s) {
int temp = start;
for (int i = start; i <= end; i++) {
if (s.charAt(i) == a && i != end) {
temp = i + 1;
}
}
return temp;
}