48-文字なしの最長の部分文字列を繰り返す顔の質問オファー安全性を証明する - 動的プログラミング

/ * 
タイトル:
	最長部分文字列が繰り返し文字が含まれています。
* / 
/ * 
アイデア:
	。F(I)= F(I-1)+ 1、(現在の文字、距離> F(I-1)の上には表示されません。
		   現在の現れの文字と文字から、距離を
* / 
# <入出力ストリーム>含む
の#include <CStringの> 
する#include <ベクトル> 
の#include <アルゴリズム> 


;使用名前空間STD 


INT longestSubstringWithoutDuplication(文字列STR){ 
    int型EN [26である]; 
    のmemset(EN、-1、はsizeof(EN)); 
    INT str.size = LEN(); 
    INT MAXVAL = 0; 
    int型CURR = 0; 
    のための(INT I = 0; I <LEN; I ++){ 
        IF(EN [STR [I] - [A '] == -1) { 
            CURR + = CURR 1; 
        }他{ 
            INT I = D - EN [STR [I] - [A ']。
            IF(D> CURR){
                CURR ++; 
            }他{ 
                IF(CURR> MAXVAL){ 
                    MAXVAL = CURR。
                } 
                CURR = D。
            } 
        } 
        COUT << STR [I] << " "<< I <<"" << CURR << ENDL。
        EN [STR [I] - ''] = I。
    } 
    MAX(CURR、MAXVAL)を返します。
} 

int型のmain(){ 
    文字列str = "arabcacfr"。
    COUT << longestSubstringWithoutDuplication(STR)。

    0を返します。
}

    

おすすめ

転載: www.cnblogs.com/buaaZhhx/p/12051392.html