标签:字符 拜年 right hashset 力扣 ans 第五天 left 指针
离开力扣两三天,手就痒痒啊!完了,彻底中毒了,哈哈哈!!!
今日第一题:力扣第3题
解题思路:
首先肯定想到的是暴力解法,双指针,里外循环一起走,但是这个时间复杂度为O(n2),为了减少时间复杂度,我们让内循环(左指针)不回头的遍历,拿到一个ans的字符子串长度,丢弃左指针的字符,右指针判断下一个位置的字符是否与现在的字符子串内的字符重复,不重复就加进来,重复就不加,左指针继续向右走。直到越界。
代码如下:
class Solution {
public int lengthOfLongestSubstring(String s) {
//储存不重复的字符
Set<Character> hashset = new HashSet<>();
//将右指针至于左边界的左端
int right = -1;
int ans = 0;
//遍历左指针,记录最长字符子串。扔掉最左边的一个字符,右指针往右走看看是否比上一组字符子串长,长就记录下来
for(int left = 0; left < s.length(); left++) {
if(left != 0) {
hashset.remove(s.charAt(left - 1));
}
while(right+1 < s.length() && !hashset.contains(s.charAt(right + 1))) {
hashset.add(s.charAt(right + 1));
right++;
}
ans = Math.max(ans, right - left + 1);
}
return ans;
}
}
完蛋,晚上遇到一个题,看了别人题解没想明白,哈哈哈,现在脑袋都大了,明天再看看吧,呜呜呜!!!
标签:字符,拜年,right,hashset,力扣,ans,第五天,left,指针 来源: https://blog.csdn.net/qq_40549426/article/details/122783053
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。