• 【LeetCode】无重复字符的最长子串


    【问题】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

    示例 1:
    输入: "abcabcbb"
    输出: 3 
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    示例 2:
    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
    示例 3:
    输入: "pwwkew"
    输出: 3
    解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
    请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

    【思路】

    首先我们现在看一下最简单的一个字符串的查找,比如"ydyw",首先左边界left=0,我们开始遍历,每遍历一个位置,如果没有重复的元素,那么max_len=i-left+1,然后对max_len进行更新!如果找到一个重复的元素,比如遍历到i=2,此时y重复,那么我们要更新左边界的索引为上一次该元素索引值+1,这样就保证了此时[left:i]即[1:2]中没有元素重复!

    由于我们需要使用上一次遍历的索引值,因此我们使用hashmap来进行存储,我们可以使用"边遍历边建立hashmap"的思想!

    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            int left = 0, max_len = 0;
            unordered_map<char, int> hashmap;
            for(int i = 0;i < s.size(); i++){  
                if(hashmap.find(s[i]) != hashmap.end()){
                    left = max(left, hashmap[s[i]]+1);
                    // 如果找到了,左边界更新为上一个遍历该元素索引值+1
                }
                max_len = max(max_len, i-left+1);
                hashmap[s[i]] = i;
            }
            return max_len;
        }
    };
  • 相关阅读:
    MongoDB权限验证
    【大型网站开发系列第一篇】——网站结构层次
    php5.4的htmlspecialchars处理中文
    将session值字符串重新生成session
    php支持短标签
    solr suggest+autocomplete实现自动提示
    linux命令
    【技术】【转】字节序问题大端法小端法
    eeePC(易PC)变态测试!(上)
    "挑iPod不问价"就是不懂“性价比”?
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11509087.html
Copyright © 2020-2023  润新知