leetcode3. Longest Substring Without Repeating Characters

leetcode3. Longest Substring Without Repeating Characters

题意:

给定一个字符串,找到最长子串的长度,且该字串不含不重复字符。

思路:

用map存储,key为字符,value为index;
O(n),遍历字符串,动态规划,一开始确定start的index,然后遍历,每次遍历的字符记作char,只要char对应map中value小于start,长度就在一直伸长,一旦大于或等于start,说明前一个该字符在start之后出现过一次,所以吧start点移动至前一个map[char]的index的下一位,更新map,然后继续遍历。

ac代码:

C++

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int res=0;
        int map[256];
        memset(map,-1,sizeof(map));
        int start = 0,temp = 0;
        
        for(int i=0;i<s.length();i++)
        {
            if(start <= map[s[i]])
            {                
                start = map[s[i]] + 1;
                temp = i - start + 1;                
            }
            else
            {
                if(++temp > res) res = temp;
            }
            map[s[i]] = i;
        }
        return res;
    }
};

python

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        char_map = {}
        start = temp = res = 0
        for i in range(len(s)):
            if s[i] in char_map and start <= char_map[s[i]]:
                start = char_map[s[i]] + 1
                temp = i - start +1
            else:
                temp += 1
                res = max(res, temp)
            char_map[s[i]] = i
        return res

posted on 2017-07-09 22:15  炮二平五  阅读(105)  评论(0编辑  收藏  举报

导航