【题目】
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
【思路】
遍历字符串中的每个字符,如果在子串中没有出现,则将该字符加入子串中,如果在子串中已经出现过,则更新当前子串第一个字符位置为查找到的重复字符后面一个字符,并将该字符加入子串中,并根据更新的长度来更新最大字符串的长度,如果小于原来的子串长度,则不变,否则将子串的长度设置为当前子串长度。这样就可以求出该字符串中的最大不重复子串的最大长度。
【c++代码】
#include<string>
class Solution {
public:
int lengthOfLongestSubstring(string s) {
string ans;
int res=0;
for(int i=0;i<s.length();i++)
{
if(ans.find(s[i])>=ans.length())
ans+=s[i];
else
{
ans=ans.substr(ans.find(s[i])+1,ans.length()-1);
ans+=s[i];
}
res=max(res,(int)ans.length());
}
return res;
}
};