3. Longest Substring Without Repeating Characters——经典题

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值为当前位置。

其实就是用两个指针,判断出字符串中所有重复出现的字符的长度,选出最大值即可,复杂度O(n) + O(n) = O(n),而不是Ο(n2)

这道题纠结了我好久啊!!!!!

(其实这道题和Trapping Rain WaterContainer With Most Water这两道题有异曲同工之妙)

看了这篇博客:http://www.cnblogs.com/dollarzhaole/p/3155712.html

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        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;
  }
}

 

posted @ 2015-06-04 18:55  linqiaozhou  阅读(215)  评论(0编辑  收藏  举报