LeetCode——无重复字符的最长子串

题目描述:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
Xiaomeng
题解:
1,动态规划,dp[0] = 1
2,找到与当前字符之前最近的一样的字符,计算下标差i-j
3,比较下标差与当前字符前一个字符dp[i-1]+1最小的值
4,如果前边么有一样的字符,则当前字符的dp值为前一个字符dp[i]+1

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int len = s.length();
        vector<int> dp;
        if(!len) return 0;
        dp.push_back(1);
        int maxn = 1;
        for(int i=1; i<len; i++)
        {
            int flag = 0;
            for(int j=i-1; j>=0; j--)
            {
                if(s[i] == s[j])
                {
                    dp.push_back(i-j>dp[i-1]+1 ? dp[i-1]+1:i-j);
                    flag = 1;
                    break;
                }
            }
            if(!flag) dp.push_back(dp[i-1]+1);
            maxn = maxn>dp[i] ? maxn:dp[i];
        }
        return maxn;
    }
};
发布了325 篇原创文章 · 获赞 119 · 访问量 11万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 终极编程指南 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览