题目描述:
给定一个字符串s,请你找出其中不含有重复字符的最长 子串的长度。
示例 1:
输入:s = "abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。示例 2:
输入:s = "bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其长度为 1。示例 3:
输入:s = "pwwkew"输出:3解释:因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是子串的长度,"pwke"是一个子序列,不是子串。
提示:
0 <= s.length <= 5 * 104s由英文字母、数字、符号和空格组成
我的思路:
每次循环中,i是窗口的「右边界」(当前要加入窗口的字符c),我们通过查c上一次出现的位置,把窗口的「左边界l」推到「c上一次出现位置的下一位」,这样就保证了从l到i的窗口里,绝对没有重复的c,也自然保证了整个窗口内所有字符都不重复
我的代码:
class Solution { public int lengthOfLongestSubstring(String s) { int[] intsHa = new int[128]; int maxL = 0; int l = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); l = Math.max(l,intsHa[c]); intsHa[c]=i+1; maxL = Math.max(maxL,i-l+1); } return maxL; } }