3.lengthOfLongestSubstring

题目: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 dict(256, -1);//ascii共占8位二进制数,共256个字符编码,其中包括a~z
	int 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 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;
	}
 
   
 
   
 
   
 
  

你可能感兴趣的:(LeetCode)