Problem: 3. 无重复字符的最长子串
文章目录
- 思路
- Code
思路
👨🏫 参考
Code
⏰ 时间复杂度: O ( n ) O(n) O(n)
🌎 空间复杂度: O ( 1 ) O(1) O(1)
class Solution {public int lengthOfLongestSubstring(String s){if (s == null || s.length() == 0)return 0;int n = s.length();char[] ss = s.toCharArray();int ans = 1;
// pre[i] 表示 ASCII码值为 i 的字符 上一次出现在什么位置,没出现过则为 -1int[] pre = new int[256];Arrays.fill(pre, -1);int l = 0;// 当前无重复字符子串起点for (int r = 0; r < n; r++)// 枚举终点{if (pre[ss[r] ] != -1)l = Math.max(pre[ss[r]] + 1, l);//不能向左滑pre[ss[r]] = r;ans = Math.max(ans, r - l + 1);}return ans;}
}