Longest Substring Without Repeating Characters

来源:互联网 发布:windows文件夹 编辑:程序博客网 时间:2024/06/04 19:48

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.


这一题思路有很多,可以简单的暴力求解,时间复杂度会比较高,当然如果也有“巧”方法。

试想,首先设定一个初始指针,记录开始的位置,然后再每次记录每个字符上一次访问的位置,当遇到相同的字符时进行位置的更新,这时需要更新初始指针到上一个相同字符的下一个位置,因为在这之前的字符肯定是比上一个初始指针近的。这个方法巧妙地避开了重复扫描,时间复杂度降到O(n)。


class Solution {public:int lengthOfLongestSubstring(string s) {int loc[256];int maxLen = 0;int currentS = -1;//current startmemset(loc, -1, sizeof(loc));for (int i = 0; i < s.size(); ++i){if (loc[s[i]]>=currentS){currentS = loc[s[i]]+1;}if ((i - currentS+1) > maxLen){maxLen = i - currentS+1;}loc[s[i]] = i;}return maxLen;}};



0 0