zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    visual studio 目录
    CMake教程小结
    CMake教程
    blender坐标系梳理
    Blender3d obj坐标转换示意图
    行列式的向量形式
    高等代数 第一章 行列式
    C++ Union实验
    git 分支合并学习实验
    C++使用memset注意事项
  • 原文地址:https://www.cnblogs.com/weedboy/p/7143410.html
Copyright © 2011-2022 走看看