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 的字符 上一次出现在什么位置,没出现过则为 -1
int[] 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;
}
}