问题:
给定一个字符串,找出不含有重复字符的 最长子串 的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。请注意答案必须是一个子串,"pwke"
是 子序列 而不是子串。
#include "stdafx.h"
#include<vector>
#include<iostream>
#include<map>
#include<algorithm> //max函数包含在此文件中
using namespace std;
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int ret = 0;
map<char, int> m; //map键-值对,添加的元素如果没有的话就会初始化
int start = 1;
for (int i = 1; i <= s.length(); i++)
{
char c = s[i - 1];
if (m[c] >= start) //如果遇到相同的元素则把start放到元素的后面
{
start = m[c] + 1;
m[c] = i;
}
else //否则更新长度,长度是通过i(尾部)和start(头部)来决定
{
m[c] = i;
ret = max(ret, i - start + 1); //更新长度的条件:大于目前存储的最大元素
}
}
return ret;
}
};
注:原码来自https://blog.csdn.net/wangyuquanliuli/article/details/45724887。不过该大佬并没有写注释,作为一个c++萌新我也是理解了好久才加的注释。