美文网首页数据结构和算法分析程序员
求最长无重复字符子串长度

求最长无重复字符子串长度

作者: CLCP | 来源:发表于2018-01-13 11:34 被阅读92次

给定一个字符串A及它的长度n,请返回它的最长无重复字符子串长度。保证A中字符全部为小写英文字符,且长度小于等于500。

示例:"aabcb",5

返回:3

解题方法:
从左到右依次求出以每一个字符结尾的字符串的最长无重复子串,取最大值,就是整个字符串 的最长无重复子串。

具体做法:
用一个map记录每个字符上一次出现的位置,用一个整型变量pre记录以上一个字符结尾的字符串的最长无重复子串长度。在遍历字符串时,每一步都做如下操作:

  1. 取出该字符上一次出现的位置,记为last_pos,如果该字符第一次出现,则该值为-1
  2. 计算出以上一个字符结尾的字符串的最长无重复子串起始位置,记为pre_last_pos该值为i-pre
  3. 比较last_pos和pre_last_pos,如果last_pos在pre_last_pos的左边,则当前位置的最长无重复子串最多取到pre_last_pos的位置,即pre + 1,否则可以取到ast_pos右边的位置,即i - last_pos

实现代码(c++):

int longestSubstring(string A, int n) {
    map<char, int> pos;
    int pre = 0;
    int str_len = 0;
    for (int i = 0; i < n; i++) {
        map<char, int>::iterator it = pos.find(A[i]);
        int last_pos = it == pos.end() ? -1 : it->second;
        int cur_len = last_pos >= i - pre ? i - last_pos : pre + 1;
        pre = cur_len;
        str_len = cur_len > str_len ? cur_len : str_len;
        pos[A[i]] = i;
    }
    return str_len;
}

相关文章

  • 算法1-无重复字符的最长子串

    无重复字符的最长子串 首先分析一下题目,求给定字符串的最长不重复子串,思路应该是分治不断降规模,把长度为n的字符串...

  • 求最长无重复字符子串长度

    给定一个字符串A及它的长度n,请返回它的最长无重复字符子串长度。保证A中字符全部为小写英文字符,且长度小于等于50...

  • 2、Length Of Longest Substring

    输入:“pwwkew” 输出:“3” 过程:求最长不重复字符子串长度 简单暴力求解:代码如下: 字符映射

  • leetCode3最大无重复字符的子串

    最长无重复字符的子串 给定一个字符串,找出不含有重复字符的最长子串的长度。 示例: 实现思路 初始化hashSet...

  • 最长不重复问题

    题目:求最长无重复子串从一个字符串中找到一个连续子串,该子串中任何两个字符不能相同,求子串的最大长度并输出一条最长...

  • Longest Substring Without Repeat

    题目:求最长无重复子串从一个字符串中找到一个连续子串,该子串中任何两个字符不能相同,求子串的最大长度并输出一条最长...

  • 面试常见算法

    最长不含重复字符的子字符串: 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例...

  • 【leetcode3】 3. Longest Substrin

    关键字:最长不重复子串、双指针 难度:Medium 题目大意:求一个字符串最长不重复子串的长度 题目: Given...

  • 字符串

    1 最长无重复字符子串 2 最长上升子序列(动态规划) 3 最长公共子序列的长度(动态规划) 4 对于一个字符串,...

  • KirogiYi ARTS打卡:第二周

    Algorithm(求最长子串的长度) 描述:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 思路:...

网友评论

    本文标题:求最长无重复字符子串长度

    本文链接:https://www.haomeiwen.com/subject/orqcoxtx.html