question
Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: “abcabcbb”
Output: 3
Explanation: The answer is “abc”, with the length of 3.
Example 2:
Input: “bbbbb”
Output: 1
Explanation: The answer is “b”, with the length of 1.
Example 3:
Input: “pwwkew”
Output: 3
Explanation: 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.
track
- when you try to find a substring without repeating characters, all characters you keeped are different, you should keep an eye on it;
code
#include <iostream>
#include <string>
#define FLAG_UNIT_LEN 128
using namespace std;
class Solution
{
public:
int maxLength(string s)
{
int maxl = -1, j = 0;
bool flag[FLAG_UNIT_LEN] = {};
for(int i = 0; i < s.length(); i++)
{
while((j<s.length()) && !flag[s[j]])
{
maxl = maxl > (j-i+1) ? maxl : (j-i+1);
flag[s[j]] = true;
j++;
}
flag[s[i]] = false;
}
return maxl;
}
};
int main()
{
string s = "abcabcbb";
Solution su;
cout << su.maxLength(s) << endl;
return 0;
}
compile
g++ -std=c++0x xxx.cpp
intresting
- someone uses an int/char array, index is character, val response pos it appeared previous time, in that case, they need only one loop(without while(j) above), try it