离开力扣两三天,手就痒痒啊!完了,彻底中毒了,哈哈哈!!!
今日第一题:力扣第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;
}
}
完蛋,晚上遇到一个题,看了别人题解没想明白,哈哈哈,现在脑袋都大了,明天再看看吧,呜呜呜!!!