/ * タイトル: 最長部分文字列が繰り返し文字が含まれています。 * / / * アイデア: 。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を返します。 }