标签:
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.
问题:求字符串不含重复字符的最长子字符串(注意子字符串是连续的,子序列可以不用连续,上面第三条例子)
思路:不含重复字符的最长子字符串,即为两个重复字符之间的子字符串中最长的一个(或者全部字符,整个字符串没有重复字符)。
代码如下:(参考九章算法http://www.jiuzhang.com/solutions/longest-substring-without-repeating-characters/)
1 class Solution { 2 public: 3 int lengthOfLongestSubstring(string s) { 4 // 题意为求不包含重复字符的最长子串 5 // left用以记录合法的最远左边界位置,last记录字符上一次出现的位置 6 int ans = 0, left = 0, len = s.length(); 7 int last[255]; 8 memset(last, -1, sizeof last); 9 10 for (int i = 0; i < len; i++) { 11 // 上次出现位置在当前记录边界之后,即该子串中出现了重复字符,需调整left使得子串合法 12 if (last[s[i]] >= left) left = last[s[i]] + 1; 13 last[s[i]] = i; 14 ans = max(ans, i - left + 1); 15 } 16 return ans; 17 } 18 };
LeetCode 3.Longest Substring Without Repeating Characters
标签:
原文地址:http://www.cnblogs.com/gexinmen/p/5932311.html