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

题目

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

给定一个字符串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;
    }

你可能感兴趣的:(最长无重复字符子串练习题)