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.
转最佳答案
前面的lambda怎么说好呢....
姑且学习一下优秀的命名规则吧
static const auto ban_io_sync = []() {
std::ios::sync_with_stdio(false);
cin.tie(nullptr);
return 0;
}();
class Solution
{
public:
int lengthOfLongestSubstring(string s)
{
if (s.empty() || s.size() <= 1)
return s.size();
bool *all_char_array = new bool[256];
memset(all_char_array, false, sizeof(bool) * 256);
queue<char> no_repeat_queue;
bool cur_char_idx;
int max_len = 0;
for (string::size_type i = 0; i < s.size(); ++i)
{
cur_char_idx = all_char_array[s[i]]; //hash
if (cur_char_idx) //if exist then empty
{
while (no_repeat_queue.front() != s[i] && no_repeat_queue.size() > 0)
{
all_char_array[no_repeat_queue.front()] = false;
no_repeat_queue.pop();
}
no_repeat_queue.pop();
}
no_repeat_queue.push(s[i]);//otherwise push
all_char_array[s[i]] = true;
if (no_repeat_queue.size() > max_len)
max_len = no_repeat_queue.size(); //renew max_len
}
return max_len;
}
};