3.lengthOfLongestSubstring

来源:互联网 发布:网络共享会议通知软件 编辑:程序博客网 时间:2024/05/17 07:51

题目: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.

Subscribe to see which companies asked this question.

class Solution {public:    int lengthOfLongestSubstring(string s) {            }};
解题思路:具体见参考算法,这个算法会让你眼前一亮

参考算法如下:

int lengthOfLongestSubstring(string s) {vector<int> dict(256, -1);//ascii共占8位二进制数,共256个字符编码,其中包括a~zint maxLen = 0, start = -1;for (int i = 0; i != s.length(); i++) {if (dict[s[i]] > start)start = dict[s[i]];//发现和前面重复的字母,并改变start标志dict[s[i]] = i;maxLen = max(maxLen, i - start);}return maxLen;}

法二:

int lengthOfLongestSubstring( std::string s ){int MaxLength = 0;auto left = s.begin();std::unordered_map<char, std::string::iterator> m;for ( auto p = s.begin(); p != s.end(); ++p ){left = m.find( *p ) == m.end() ? left : std::max( left, std::next( m.find( *p )->second ) );MaxLength = std::max( MaxLength, (int) std::distance( left, std::next( p ) ) );m[*p] = p;}return MaxLength;}
0 0
原创粉丝点击