LeetCode 每日一題——467. 環(huán)繞字符串中唯一的子字符串

1.題目描述

467. 環(huán)繞字符串中唯一的子字符串

把字符串 s 看作是 “abcdefghijklmnopqrstuvwxyz” 的無限環(huán)繞字符串,所以 s 看起來是這樣的:

"...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd...." .
現(xiàn)在給定另一個字符串 p 尔崔。返回 s 中 唯一 的 p 的 非空子串 的數(shù)量 答毫。

示例 1:

輸入: p = "a"
輸出: 1
解釋: 字符串 s 中只有一個"a"子字符。

示例 2:

輸入: p = "cac"
輸出: 2
解釋: 字符串 s 中的字符串“cac”只有兩個子串“a”季春、“c”洗搂。.

示例 3:

輸入: p = "zab"
輸出: 6
解釋: 在字符串 s 中有六個子串“z”、“a”载弄、“b”耘拇、“za”、“ab”宇攻、“zab”惫叛。

2.思路

2.1 代碼

題目要求在字符串中找到連續(xù)子數(shù)組個數(shù),其實(shí)就是在遍歷數(shù)組時尺碰,求以當(dāng)前字符結(jié)尾的連續(xù)子串長度挣棕,然后再把數(shù)組中每一位對應(yīng)的子串長度加起來求和便是最終答案。這里一下幾點(diǎn)需要注意:

  1. 重復(fù)字符的問題亲桥。出現(xiàn)重復(fù)字符時洛心,對比子串長度,以最長的為結(jié)果题篷,并最終結(jié)果只計(jì)算一次词身;
  2. 題目使用環(huán)形字符串,因此當(dāng)遍歷到 a 時番枚,如果前一位是 z 法严,那么就需要在前一位基礎(chǔ)上繼續(xù)往下算,即子串長度繼續(xù)加 1葫笼;
  3. 當(dāng)當(dāng)前位與前一位不連續(xù)時深啤,這個時候子串長度應(yīng)當(dāng)從 1 開始重新計(jì)算

以 “zab” 為例進(jìn)行說明:

  1. 遍歷 i=0 時,此時以 z 為結(jié)尾的連續(xù)子串只有 z 路星,因此統(tǒng)計(jì)個數(shù)為 1(z)溯街;
  2. 遍歷 i=1 時,此時以 a 為結(jié)尾的連續(xù)子串為 za洋丐,因?yàn)槭黔h(huán)形數(shù)組呈昔,所以 z 之后應(yīng)該繼續(xù)從 a 開始,此時統(tǒng)計(jì)個數(shù)為2(a友绝,za)堤尾;
  3. 遍歷 i=2 時,此時以 b為結(jié)尾的連續(xù)子串為 zab迁客,因此統(tǒng)計(jì)個數(shù)為3(b郭宝,ab辞槐,zab);
  4. 最后將三個字符對應(yīng)的最長子串個數(shù)加起來等于 6 剩蟀,便是最終答案催蝗。

再以 “aabb” 為例說明存在重復(fù)字符時的處理過程:

  1. 遍歷 i=0 時,此時以 a 為結(jié)尾的連續(xù)子串只有 a 育特,因此統(tǒng)計(jì)個數(shù)為 1(a)丙号;
  2. 遍歷 i=1 時,此時以 a 為結(jié)尾的連續(xù)子串為 a缰冤,此時子串個數(shù)為 1 犬缨,但是因?yàn)榍懊娉霈F(xiàn)過 a ,兩個子串個數(shù)都是 1 棉浸,因此以 a 為結(jié)尾的連續(xù)子串個數(shù)為 1(a)怀薛;
  3. 遍歷 i=2 時,此時以 b為結(jié)尾的連續(xù)子串為 ab迷郑,因此統(tǒng)計(jì)個數(shù)為2(b枝恋,ab);
  4. 遍歷 i=3 時嗡害,此時以 b 為結(jié)尾的連續(xù)子串為 b焚碌,長度為 1(b),但是前面出現(xiàn)過一次 b霸妹,因此選擇兩個子串中個數(shù)較大的作為以 b 結(jié)尾的子串十电,最終結(jié)果為 2;
  5. 遍歷完成得到最終答案是 3叹螟。

代碼中使用一 26 位的數(shù)組存放各個字符子串長度鹃骂,count 統(tǒng)計(jì)子串長度,當(dāng)不連續(xù)時罢绽,count 重置為 1畏线,代碼如下:

class Solution {
    public int findSubstringInWraproundString(String p) {
        char[] chars = p.toCharArray();
        int[] tmp = new int[26];
        tmp[chars[0] - 'a'] = 1;
        int count = 1;
        for (int i = 1; i < chars.length; i++) {
            if (chars[i] == chars[i - 1] + 1 || (chars[i] == 'a' && chars[i - 1] == 'z')) {
                count++;
            } else {
                count = 1;
            }
            tmp[chars[i] - 'a'] = Math.max(count, tmp[chars[i] - 'a']);
        }
        int ans = 0;
        for (int i = 0; i < 26; i++) {
            ans += tmp[i];
        }
        return ans;
    }
}

2.2 測試結(jié)果

通過測試


測試結(jié)果

3.總結(jié)

  • 題目轉(zhuǎn)換為求以字符結(jié)尾的連續(xù)子串長度更容易解答
  • 使用 tmp 數(shù)組統(tǒng)計(jì)每一位字符為結(jié)尾的連續(xù)子數(shù)組個數(shù)
  • 當(dāng)存在不連續(xù)的時候,count 重置為 1
  • 這道題其實(shí)挺難的良价,主要很容易陷入慣性思維寝殴,從頭開始往后迭代進(jìn)行字符判斷,但是一旦把思維轉(zhuǎn)換過來后所有問題都迎刃而解了
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棚壁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子栈虚,更是在濱河造成了極大的恐慌袖外,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魂务,死亡現(xiàn)場離奇詭異曼验,居然都是意外死亡泌射,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門鬓照,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熔酷,“玉大人,你說我怎么就攤上這事豺裆【苊兀” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵臭猜,是天一觀的道長躺酒。 經(jīng)常有香客問我,道長蔑歌,這世上最難降的妖魔是什么羹应? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮次屠,結(jié)果婚禮上园匹,老公的妹妹穿的比我還像新娘。我一直安慰自己劫灶,他們只是感情好裸违,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浑此,像睡著了一般累颂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凛俱,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天紊馏,我揣著相機(jī)與錄音,去河邊找鬼蒲犬。 笑死朱监,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的原叮。 我是一名探鬼主播赫编,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奋隶!你這毒婦竟也來了擂送?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤唯欣,失蹤者是張志新(化名)和其女友劉穎嘹吨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體境氢,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蟀拷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年碰纬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片问芬。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡悦析,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出此衅,到底是詐尸還是另有隱情强戴,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布炕柔,位于F島的核電站酌泰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏匕累。R本人自食惡果不足惜陵刹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望欢嘿。 院中可真熱鬧衰琐,春花似錦、人聲如沸炼蹦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掐隐。三九已至狗热,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虑省,已是汗流浹背匿刮。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留探颈,地道東北人熟丸。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像伪节,于是被迫代替她去往敵國和親光羞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

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