leetcode每日一題之30.Substring with Concatenation of All Words


thumbnail: https://s2.ax1x.com/2019/04/05/ARfLq0.jpg
title: 30.Substring with Concatenation of All Words
toc: true
tags: leetcode
categories: leetcode
comments: true


題目描述:與所有單詞相關(guān)聯(lián)的子串

給定一個(gè)子串s和一些長(zhǎng)度相同的單詞組成的字符串?dāng)?shù)組words.
注意:
在s中找出恰好串聯(lián)words中所有單詞的子串的起始位置,中間不能有其他字符,但不要考慮words中單詞串聯(lián)的順序.


示例1:(允許無(wú)序)

Input:
???????s = "barfoothefoobarman",
???????words = ["foo","bar"]
Output:
???????[0,9]

示例2:(中間不能有其他字符)

Input:
???????s = "wordgoodgoodgoodbestword",
???????words = ["word","good","best","word"]
Output:
???????[]

示例3:

Input:
???????s = "oooooo",
???????words = ["oo","oo"]
Output:
???????[0,1,2]

<font color="red">由題意,我們可以得到以下幾點(diǎn)信息:</font>

  • 找到的子串長(zhǎng)度等于給定單詞數(shù)組長(zhǎng)度與其中單個(gè)字符串長(zhǎng)度的乘積
  • 單詞數(shù)組里面允許出現(xiàn)重復(fù)的單詞
  • 子串之間是可以疊加出現(xiàn)的(示例3)

解法一:

  1. 首先中鼠,我們可以得到words中單個(gè)字符的長(zhǎng)度喉悴,設(shè)為wLen,words字符串?dāng)?shù)組的長(zhǎng)度為wordsLen;
  2. 找到的子串長(zhǎng)度必定為wLen * wordsLen;
  3. 遍歷給定字符串,長(zhǎng)度為sLen,可以得到sLen-wLen * wordsLen+1個(gè)子串;
  4. 遍歷時(shí),將長(zhǎng)度為wLen * wordsLen的子串等均等拆分為字符串?dāng)?shù)組,每個(gè)字符串長(zhǎng)度為wLen;
  5. 將上一步得到的字符串?dāng)?shù)組進(jìn)行排序猛遍,給定的words也要進(jìn)行排序,這時(shí)候,如果兩個(gè)字符串?dāng)?shù)組的內(nèi)容一樣睡腿,則該子串符合要求,將子串對(duì)應(yīng)的索引添加到返回的結(jié)果數(shù)組中.

java源程序:

class Solution {
    public List<Integer> findSubstring(String s, String[] words) {
        int sLen = s.length();
        int unit = words.length;
        List<Integer> res = new LinkedList<>();
        if(unit==0 || sLen==0) return res;
        int wLen = words[0].length();
        int wordsLen = unit*wLen;
        Arrays.sort(words);
        for(int i=0;i<sLen-wordsLen+1;i++){           
            String sub = s.substring(i,i+wordsLen);
            if(isSubstring(sub,unit,wLen,words)){
                res.add(i);
            }
        }
        return res;
    }
    public boolean isSubstring(String sub,int unit,int wLen,String[] words){
        
        String[] temp = new String[unit];
        for(int i=0,k=0;i<unit;i++){
            temp[i] = sub.substring(k,k+wLen);
            k = k+wLen;  
        }
        Arrays.sort(temp);
        return Arrays.equals(temp,words);
    }
}

當(dāng)然峻贮,這樣的算法屬于一種暴力求解席怪,復(fù)雜度最佳和最差都是n * log2(n)
如下圖:

image

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市纤控,隨后出現(xiàn)的幾起案子挂捻,更是在濱河造成了極大的恐慌,老刑警劉巖船万,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刻撒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡耿导,警方通過(guò)查閱死者的電腦和手機(jī)声怔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舱呻,“玉大人醋火,你說(shuō)我怎么就攤上這事。” “怎么了芥驳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵介粘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我晚树,道長(zhǎng)姻采,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任爵憎,我火速辦了婚禮慨亲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宝鼓。我一直安慰自己刑棵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布愚铡。 她就那樣靜靜地躺著蛉签,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沥寥。 梳的紋絲不亂的頭發(fā)上碍舍,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音邑雅,去河邊找鬼片橡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛淮野,可吹牛的內(nèi)容都是我干的捧书。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼骤星,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼经瓷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起洞难,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤舆吮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后廊营,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體歪泳,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年露筒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呐伞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡慎式,死狀恐怖伶氢,靈堂內(nèi)的尸體忽然破棺而出趟径,到底是詐尸還是另有隱情,我是刑警寧澤癣防,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布蜗巧,位于F島的核電站,受9級(jí)特大地震影響蕾盯,放射性物質(zhì)發(fā)生泄漏幕屹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一级遭、第九天 我趴在偏房一處隱蔽的房頂上張望望拖。 院中可真熱鬧,春花似錦挫鸽、人聲如沸说敏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盔沫。三九已至,卻和暖如春枫匾,著一層夾襖步出監(jiān)牢的瞬間架诞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工婿牍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留侈贷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓等脂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親撑蚌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子上遥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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