admin管理员组文章数量:1794759
每日一练【无重复字符的最长子串】
一、题目描述
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
二、题目解析
算法思想:移动窗口的思想去解决。
那为什么要用这个方法解决呢?
我们首先用暴力的思路去遍历一遍,我们遍历到deabc后,出现了第一个重复字符a,如果此时左指针直向后移动一位,然后右指针继续从左指针的下一位慢慢遍历,会重蹈覆辙。
因此我们发现这样的一个规律:那就是当遍历出现重复字符时,再重新遍历,左指针应该从重复的字符下一位开始,这样就避免很多的重复操作。
这样左右指针都是向同一方向去遍历,符合我们的移动窗口的题目的条件,所以这时我们才回去采用移动窗口去解决!
下面就是利用移动窗口的思想去解决这道题。
- 让做右指针都为0
- 进窗口,让字符进入哈希表
- 判断窗口是否出现重复字符
- 更新最大值
三、原码
代码语言:javascript代码运行次数:0运行复制class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left = 0,right = 0;
int ret = 0;
//用数组实现简易的哈希表
int hash[128] ={0};
if(s.size() == 1)
return 1;
while(right < s.size())
{
hash[s[right]]++;
while(hash[s[right]] > 1)
{
hash[s[left++]]--;
}
ret = max(ret,right-left+1);
right++;
}
return ret;
}
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2023-12-11,如有侵权请联系 cloudcommunity@tencent 删除数组算法指针字符串遍历本文标签: 每日一练无重复字符的最长子串
版权声明:本文标题:每日一练【无重复字符的最长子串】 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754810096a1706733.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论