题目链接
题目描述
实现代码
思路:采用一个滑动窗口(即数组)用来保存当前的最长无重复子串,然后每次遍历都把当前位置的字符与滑动窗口进行比较并且更新滑动窗口,需要维护滑动窗口的startIdx和realLen,实现代码如下:
class Solution {
public int lengthOfLongestSubstring(String s) {
int len = s.length();
if(len < 2) {
return len;
}
char[] chars = new char[len];
int startIdx = 0;
int realLen = 0;
chars[0] = s.charAt(0);
realLen = 1;
int maxLen = 1;
for (int i = 1; i < len; i++) {
char c = s.charAt(i);
boolean isSwap = false;
for(int j=startIdx; j<realLen + startIdx; j++) {
if(c == chars[j]) {
realLen -= j - startIdx + 1;
startIdx = j+1;
isSwap = true;
break;
}
}
chars[realLen+startIdx] = c;
realLen++;
if(!isSwap) {
maxLen = Math.max(maxLen, realLen);
}
}
return maxLen;
}
}