最长无重复字符子串练习题

题目

对于一个字符串,请设计一个高效算法,找到字符串的最长无重复字符的子串长度。

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

思路
  • DP思想:最优子结构、重复子问题
  • Hash:存储上一个位置,辅助DP进行
答案
    int longestSubstring(string A, int n) {
        // 存储上一个重复字符的位置
        int *lastPosition = new int[256];
        for (int i = 0; i < 256; i++) {
            lastPosition[i] = -1;
        }

        // 动态规划过程
        int previous = -1;// 前一个的最长子串左节点位置
        int current = 0;
        int maxLength = 0;
        for (int i = 0; i < n; i++) {
            previous = max(previous, lastPosition[A[i]]);
            current = i - previous;
            maxLength = max(current, maxLength);
            lastPosition[A[i]] = i;
        }
        return maxLength;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目 对于一个字符串,请设计一个高效算法,找到字符串的最长无重复字符的子串长度。给定一个字符串A及它的长度n,请返...
    IT_Matters阅读 6,495评论 0 1
  • 算法字符串系列的第四篇文章,计算给定字符串的最长无重复子串。 这篇文章主要介绍两种方法,一种是基于hash的思想,...
    zero_sr阅读 14,824评论 3 14
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,863评论 24 1,002
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 1. 问题定义 最长不重复子串:一个字符串中最长的没有重复字符的子串。举个🌰 : abcabcbb 最长子串 a...
    林大鹏阅读 14,091评论 0 2