Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.
解題思路:
歷遍字符串,當當前字符出現過的時候,子串開始位置+1,否則更新locs數組中的hash值為當前位置。
詳細解釋參考http://blog.csdn.net/pickless/article/details/9018575
以下是代碼:
class Solution { public: int lengthOfLongestSubstring(string s) { // Start typing your C/C++ solution below // DO NOT write int main() function int locs[256];//保存字符上一次出現的位置 memset(locs, -1, sizeof(locs)); int idx = -1, max = 0;//idx為當前子串的開始位置-1 for (int i = 0; i < s.size(); i++) { if (locs[s[i]] > idx)//如果當前字符出現過,那么當前子串的起始位置為這個字符上一次出現的位置+1 { idx = locs[s[i]]; } if (i - idx > max) { max = i - idx; } locs[s[i]] = i; } return max; } };