leetcode第三題 最大連續(xù)不重復子字符串

很傷心泪喊,很傷心

我的。勤晚。


我的。领虹。

別人的。菌羽。


別人的掠械。。

想說點什么的注祖。猾蒂。

題目

要求從一個字符串中尋找一個子字符串,要求是是晨,連續(xù)肚菠,沒有重復字符。返回子字符串的長度即可罩缴。


題目

分析

我是這樣想的蚊逢,從頭開始查找,如果有重復的字符箫章,那么返回重復字符的下一個字符的位置重復查找烙荷,每次返回的時候記錄此時構(gòu)建的字符串長度。
這樣的的話檬寂,需要一個容器存放構(gòu)建的字符串终抽,string明顯不符合要求。因為還需要記住下標桶至,嗯昼伴,用map

int lengthOfLongestSubstring(string s) {

map<char, int> tmp;
//是否連續(xù)
bool nextInTmp = false; 
int len = s.length();
int maxLen = 0;
for(int i = 0;i < len; i++){
    int tmpLen = tmp.size();
    //判斷是否重復了
    nextInTmp = (tmp.find(s[i]) != tmp.end());
    if(nextInTmp){
        //如果重復了
        //讓i=重復的那個字符的下標
        //for循環(huán)的時候會讓他+1
        //就變成了镣屹,該字符的下一個字符
        i = tmp[s[i]];
        //清空這個map
        tmp.clear();
    }else{
        //如果沒有重復圃郊,那么添加進去
        tmp.insert(make_pair(s[i],i));
        tmpLen = tmp.size();
        //對比一下最大的長度
        if(tmpLen > maxLen){
            maxLen = tmpLen;
        }
    }
}
return maxLen; 
}

嗯,這是中規(guī)中矩的女蜈。持舆。也是最笨的了吧。

缺點

重復構(gòu)造字符串伪窖,沒有很好的處理子字符串開始位置改變這種情況吏廉。

不要用改變for中的i,開重復執(zhí)行惰许。

別人的

看了排名靠前的代碼,居然史辙。汹买。佩伤。字符都當做整數(shù)來處理+不構(gòu)造字符串,同樣使用下標來記錄是否存在晦毙。

int lengthOfLongestSubstring(string s) {
    vector<int>v(256,-1);
    int len=s.size(),ans=0,start=-1;    
    for(int i=0;i<len;i++){
        if(v[s[i]]>start)//Slding window
            start=v[s[i]];
        v[s[i]]=i; 
        ans=max(ans,i-start);
    }
    return ans;
}

可能看不懂生巡,我解釋一下。

  1. 用來構(gòu)造字符串的容器见妒。只是記錄有還是沒有孤荣,初始化為-1,意思是不存在這個字符须揣。
vector<int>v(256,-1);
  1. start用來記錄子字符串開始的位置盐股,初始化為-1,表示沒有開始構(gòu)造子字符串耻卡。
start=-1;
  1. 這里的意思是疯汁,之前這個某個字符已經(jīng)存在過了,也就是說卵酪,已經(jīng)在該字符出現(xiàn)之前出現(xiàn)過相同的字符了幌蚊,(在4里面介紹)那么就將start也就是開始位置標記為上次該字符的出現(xiàn)位置。
if(v[s[i]]>start)
    start=v[s[i]];
  1. 這里溃卡,如果字符出現(xiàn)了溢豆,那么在容器中對應的下標,賦值為該字符在字符串中出現(xiàn)的下標瘸羡。配合3.來使用漩仙。
v[s[i]]=i;
  1. i-start的意思是,當前for循環(huán)的i(也就是子字符串的結(jié)束字符)減去子字符串結(jié)束的字符的下標位置最铁,結(jié)果就是子字符串的長度讯赏。
ans=max(ans,i-start);

就這樣。
它使用講字符轉(zhuǎn)化為int作為vector的下標冷尉,同時將值作為在string中的下標漱挎,以此來省略自己構(gòu)造字符串。
并且雀哨,如果重復的字符不是子字符串的第一個字符磕谅,也可以很好改變子字符串的開始位置。
而我的“算法”雾棺,差在重復的膊夹、返回的構(gòu)造子字符串。

#啟示

總結(jié)不出來捌浩。放刨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市尸饺,隨后出現(xiàn)的幾起案子进统,更是在濱河造成了極大的恐慌助币,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螟碎,死亡現(xiàn)場離奇詭異眉菱,居然都是意外死亡,警方通過查閱死者的電腦和手機掉分,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門俭缓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酥郭,你說我怎么就攤上這事华坦。” “怎么了褥民?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵季春,是天一觀的道長。 經(jīng)常有香客問我消返,道長载弄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任撵颊,我火速辦了婚禮宇攻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘倡勇。我一直安慰自己逞刷,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布妻熊。 她就那樣靜靜地躺著夸浅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扔役。 梳的紋絲不亂的頭發(fā)上帆喇,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音亿胸,去河邊找鬼坯钦。 笑死,一個胖子當著我的面吹牛侈玄,可吹牛的內(nèi)容都是我干的婉刀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼序仙,長吁一口氣:“原來是場噩夢啊……” “哼突颊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤洋丐,失蹤者是張志新(化名)和其女友劉穎呈昔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體友绝,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年肝劲,在試婚紗的時候發(fā)現(xiàn)自己被綠了迁客。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡辞槐,死狀恐怖掷漱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情榄檬,我是刑警寧澤卜范,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站鹿榜,受9級特大地震影響海雪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舱殿,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一奥裸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沪袭,春花似錦湾宙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至死宣,卻和暖如春伟恶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背十电。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工知押, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹃骂。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓台盯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親畏线。 傳聞我的和親對象是個殘疾皇子静盅,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容