Problem
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.
Answers
Complexity: O(n)
Iterate through the string given from the beginning to the end and record the count of the occurences of every character using a set.
If the count of one letter is bigger than 1, delete all the elements from the set in the sequential order of the given string til the count of that letter equal 1.
Code
#include <set>
#include <algorithm>
using namespace std;
class Solution {
public:
int lengthOfLongestSubstring(string s) {
set<char> dic;
int ans = 0;
for (int i = 0, j = 0; i < s.size(); ++i) {
char ch = s[i];
if (dic.count(ch) == 1) {
do {
dic.erase(s[j]);
}while (s[j++] != ch);
}
dic.insert(ch);
ans = max(ans, i - j + 1);
}
return ans;
}
};
本文介绍了一种求解字符串中最长无重复字符子串长度的高效算法,复杂度为O(n)。通过遍历字符串并使用集合记录字符出现次数,当发现重复字符时则从头删除直至无重复。
695

被折叠的 条评论
为什么被折叠?



