package 剑指offer.字符串;
import java.util.HashSet;
import java.util.Set;
public class leetcode3无重复字符最长子串 {
public int lengthOfLongestSubstring(String s) {
// 哈希集合,记录每个字符是否出现过
HashSet<Character> occ = new HashSet<Character>();
int n = s.length();
// 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
int rk = -1, ans = 0;
for (int i = 0; i < n; i++) {
if (i != 0) {
// 左指针向右移动一格,移除一个字符(第一次不移动)
occ.remove(s.charAt(i - 1));
}
//一旦遇到之前已经在hashset的那么右指针就不走了
while (rk + 1 < n && !occ.contains(s.charAt(rk + 1))) {
//确定第rk+1个字符不在hashtset里面,就把第rk+1字符进入hashset
occ.add(s.charAt(rk + 1));
// 不断地移动右指针
rk++;
}
// 第 i 到 rk 个字符是一个无重复字符子串的长度(左指针到右指针的长度)
ans = Math.max(ans, rk - i + 1);
}
return ans;
}
}
leetcode3无重复最长子串
最新推荐文章于 2024-09-07 12:59:11 发布