一、题目

二、思路
采用滑动窗口:
- 根据题目提示,s 由字母、数字、符号和空格组成,可以将所有字符采用ASCII码存储相应出现次数。
- 由于 right 右移一位,窗口内的字符出现次数增加 1的字符就是 right 所指向的字符,所以只需要检查当前 right 指向的字符是否次数超出 1 即可判断当前窗口内的字符串是否无重复子串。若当前字符出现的次数超过1,开始收缩窗口,即 left 右移,直至当前字符出现次数不超过 1,就可以确保窗口内的字符串无重复字符。
三、代码
class Solution {
public int lengthOfLongestSubstring(String s) {
int ans = 0;
// 将所有字符采用ASCII码存储相应出现次数
int[] cnt = new int[128];
for (int l = 0, r = 0; r < s.length(); r++) {
cnt[s.charAt(r)]++;
while (cnt[s.charAt(r)] > 1) {
cnt[s.charAt(l++)]--;
}
ans = Math.max(ans, r - l + 1);
}
return ans;
}
}

608

被折叠的 条评论
为什么被折叠?



