无重复字符的最长字串

无重复字符的最长字串

前言

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

思想

利用两指针(变量)逐步向右遍历该字符串。

利用HashSet数据结构约束子串具有无重复性。

利用迭代,前一字串长度与新子串长度每每比较取大值。

代码

class Solution {
public int lengthOfLongestSubstring(String s) {
//哈希集合,记录每个字符是否出现过
Set<Character> subs = new HashSet<Character>();
int n = s.length();
//1.定义变量:右指针初始为-1,代表还未移动
int r = -1;
int ans = 0;
for(int i =0;i<n;++i){
if(i!=0){
//先移动左指针,并从HashSet中移除旧的值
subs.remove(s.charAt(i-1));
}
while(r+1<n&& !subs.contains(s.charAt(r+1))){
//如果右指针还未遍历到最后,并且HashSet中没有右指针的值
//不断移动右指针
subs.add(s.charAt(r+1));
r++;
}
//逐步将新字串和旧答案比较,取大值
ans = Math.max(ans,r - i + 1);
}
return ans;
}
}
posted @   gdxstart  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示