最長無重復(fù)字符子串練習(xí)題

題目

對于一個字符串,請?jiān)O(shè)計(jì)一個高效算法,找到字符串的最長無重復(fù)字符的子串長度杯矩。
給定一個字符串A及它的長度n栈虚,請返回它的最長無重復(fù)字符子串長度。保證A中字符全部為小寫英文字符史隆,且長度小于等于500魂务。

測試樣例:"aabcb",5
返回:3

思路

設(shè)字符串為s,當(dāng)前位置i, dp[i-1]表示以i-1位置為結(jié)尾的最長無重復(fù)子串子串(以下簡稱為子串)的開始位置。并設(shè)置一個map,記錄字符s[i]上一次出現(xiàn)的位置lastOcc粘姜。
PS:dp[i-1]在圖片中表示為pre,此處使用dp[i-1]只是為了方便理解動態(tài)規(guī)劃的思想鬓照,優(yōu)化之后可以省去。

如果lastOcc<dp[i-1], dp[i]=dp[i-1];

來自畔嗤В客網(wǎng)颖杏,有刪改

如果lastOcc>=dp[i-1],dp[i]=lastOcc+1;

Paste_Image.png

綜上 :dp[i]=Math.max(dp[i-1],lastOcc+1);

所以我們可以得出以每一個位置為終點(diǎn)的子串的起始位置,即可以得出以每個位置為終點(diǎn)的每個子串的長度,從中取最大值即可坛芽。

程序代碼

用pre代替了dp[],如果還有錯誤或者不明白的地方請給我留言留储,謝謝。

import java.util.*;

public class DistinctSubstring {
    public int longestSubstring(String A, int n) {
        if(n<=1) return n;
        int maxLen=0;
        Map<Character,Integer>map=new HashMap<>();
        char[] arr=A.toCharArray();
        map.put(arr[0],0);

        int pre=0;
        Integer lastOcr=null;
        for(int i=1;i<n;i++){
            lastOcr=map.get(arr[i]); 
            if(lastOcr==null) lastOcr=-1;
            pre=Math.max(lastOcr+1,pre);
            maxLen=Math.max(i-pre+1,maxLen);
            map.put(arr[i],i);
        }
        return maxLen;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咙轩,一起剝皮案震驚了整個濱河市获讳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌活喊,老刑警劉巖丐膝,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钾菊,居然都是意外死亡帅矗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門煞烫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浑此,“玉大人,你說我怎么就攤上這事滞详×菥悖” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵料饥,是天一觀的道長蒲犬。 經(jīng)常有香客問我,道長岸啡,這世上最難降的妖魔是什么原叮? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮凰狞,結(jié)果婚禮上篇裁,老公的妹妹穿的比我還像新娘。我一直安慰自己赡若,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布团甲。 她就那樣靜靜地躺著逾冬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上身腻,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天产还,我揣著相機(jī)與錄音,去河邊找鬼嘀趟。 笑死脐区,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的她按。 我是一名探鬼主播牛隅,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酌泰!你這毒婦竟也來了媒佣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤陵刹,失蹤者是張志新(化名)和其女友劉穎默伍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衰琐,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡也糊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了羡宙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狸剃。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辛辨,靈堂內(nèi)的尸體忽然破棺而出捕捂,到底是詐尸還是另有隱情,我是刑警寧澤斗搞,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布指攒,位于F島的核電站,受9級特大地震影響僻焚,放射性物質(zhì)發(fā)生泄漏允悦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一虑啤、第九天 我趴在偏房一處隱蔽的房頂上張望隙弛。 院中可真熱鬧,春花似錦狞山、人聲如沸全闷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽总珠。三九已至屏鳍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間局服,已是汗流浹背钓瞭。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淫奔,地道東北人山涡。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像唆迁,于是被迫代替她去往敵國和親鸭丛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

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