一、问题描述
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.
二、解题思路
分别以字符串每一位为子字符串的起始字符,找出以该位字符为首位的、没有重复字符的子字符串,具体查找方法为:new一个空set,对于遍历到的每一个字符,如果在set中,说明重复字符已经出现,这时如果该无重复字符的子字符串的长度超过longestLength,则更新longestLength,然后继续寻找下一个字符串;如果当前字符不在set中,则将其添加到set中并根据情况更新longestLength。
三、C++代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int longestLength = 0;
int strlen = s.length();
set<int> longestString;
set<int>::iterator it;
for (int j = 0; j < strlen; j++) {
for (int i = j; i < strlen; i++) {
it = longestString.find(s[i]);
if (it != longestString.end()) {//find it
if (longestLength < longestString.size()) longestLength = longestString.size();
longestString.clear();
break;
} else {
longestString.insert(s[i]);
if (longestLength < longestString.size()) longestLength = longestString.size();
}
}
}
return longestLength;
}
};