Longest Substring Without Repeating Characters
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.
思路:
用两个指针i和j遍历整个字符串。i不断向前移动,同时记录碰到的字符。如果这个字符在i和j之间已经遇到过,则将j移动到i,j之间的这个字符的下一个位置。移动i,j的同时更新字符串的长度。
题解:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int current_length = 0;
int max_length = 0;
int current_start = 0;
// store the last occurance of the character
array<int, 256> use_count;
fill(begin(use_count), end(use_count), -1); // mark "not found"
for(int i = 0; i < s.size(); ++i)
{
char ch = s[i];
if (use_count[ch] == -1)
{
// unused
max_length = max(max_length, ++current_length);
use_count[ch] = i;
}
else
{
//used
// update the current length
current_length -= use_count[ch] - current_start;
// mark the characters between "current_start" and
// the occurance of ch within current string as "not found"
for(int j = current_start; j < use_count[ch]; ++j)
use_count[s[j]] = -1;
// update the starting point
current_start = i - current_length + 1; // including current char, so +1
// and the "found" position
use_count[ch] = i;
}
}
return max_length;
}
};