leetcode -day21 Longest Substring Without Repeating Characters



1、Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

分析:看到此题想到设置一个next数组,将出现的每个字母的下一个标出,这样最大不重复的长度为某一段中next值的最小值,但是不好操作;然后想到用哈希表存储元素是否出现过,但是还需要知道出现的位置才能实现长度计算,设置一个left标记不重复串的起点,往后遍历,更新哈希表,当遇到已经出现在哈希表中的值时,此段的不重复长度为当前位置-left,更新最大长度,设置left为从上一次出现的位置后面开始,同时清空哈希表中前一段的值继续上述操作。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
    	int len = s.size();
		if(len <= 1)	return len;
		vector<bool> chars(256, false);//用于判断字母是否出现过
		vector<int> position(256, 0); //保存字母出现的位置
		int left = 0; //左侧点
		int cur = 0; //从头开始
		int ret = 0; //最大长度
		while(cur < len)
		{
			char ch = s.at(cur); 
			if(!chars[ch]) //如果没有出现过
			{
				chars[ch] = true; 
				position[ch] = cur; 
			}
			else  //如果出现过,则更新最大长度,下次从上一同字母的位置开始计算长度
			{
				ret = max(ret, cur - left); //更新最大长度
				for(int i = left; i < position[ch]; ++i)  
					chars[s.at(i)] = false;
				left = position[ch] + 1;//从上次出现的位置开始
				position[ch] = cur; 
			}
			++cur;
		}
		return max(ret, cur - left);
    }
};

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

xiao囡囡

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值