首页 > 其他 > 详细

剑指offer-面试题48-最长不含重复字符的子字符串-动态规划

时间:2019-12-16 21:30:45      阅读:88      评论:0      收藏:0      [点我收藏+]
/*
题目:
	最长不含重复字符的子字符串。
*/
/*
思路:
	f(i) = f(i-1) + 1,(未出现过当前字符,distance > f(i-1)
		   distance,当前字符和上一次出现该字符的距离
*/
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>


using namespace std;


int longestSubstringWithoutDuplication(string str){
    int en[26];
    memset(en,-1,sizeof(en));
    int len = str.size();
    int maxVal = 0;
    int curr = 0;
    for(int i = 0; i < len; i++){
        if(en[str[i]-‘a‘] == -1){
            curr = curr + 1;
        }else{
            int d = i - en[str[i]-‘a‘];
            if(d > curr){
                curr++;
            }else{
                if(curr > maxVal){
                    maxVal = curr;
                }
                curr = d;
            }
        }
        cout<<str[i]<<" "<<i<<" "<<curr<<endl;
        en[str[i]-‘a‘] = i;
    }
    return max(curr,maxVal);
}

int main(){
    string str="arabcacfr";
    cout<<longestSubstringWithoutDuplication(str);

    return 0;
}

    

剑指offer-面试题48-最长不含重复字符的子字符串-动态规划

原文:https://www.cnblogs.com/buaaZhhx/p/12051392.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!