3. 无重复字符的最长子串
数据量太大,显然不能用n方的算法
又只是子串,遍历一遍即可
遇到一个重复的字母,只有两个操作
1、以此字母为间隔,将下一个字母作为起点
2、从上一个此字母(就是重复字母)的下一个字母开始,到此字母连起来
显然,第2个操作带来的价值最大
因此需要记录起点
注意一点,如果一个字母重复了,但重复字母在起点之前,那是不用管的
class Solution { public: map<char, int> vis; int lengthOfLongestSubstring(string s) { int length = s.length(); int ret = 0, temp = 0, ss = 1; for(int i = 0; i < length; i++) { if(vis[s[i]] >= ss) { ret = max(ret, temp); temp = i + 1 - vis[s[i]]; ss = vis[s[i]] + 1; vis[s[i]] = i + 1; } else temp++, vis[s[i]] = i + 1; } ret = max(ret, temp); return ret; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。