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

2017-06-27  本文已影响94人  郑明明
题目

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

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

思路
答案
    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;
    }
上一篇 下一篇

猜你喜欢

热点阅读