數(shù)據(jù)結(jié)構(gòu)與算法學習筆記(訓練營五)-經(jīng)典面試23(ppt-1)

  • 給定字符串str1和str2赞季,求str1的子串中含有str2所有字符的最小子串長度
    【舉例】
    str1="abcde"敛摘,str2="ac"
    因為"abc"包含 str2 所有的字符,并且在滿足這一條件的str1的所有子串中雄右,"abc"是 最短的厕怜,返回3。
    str1="12345"未檩,str2="344" 最小包含子串不存在戴尸,返回0。
/**
 * 給定字符串str1和str2冤狡,求str1的子串中含有str2所有字符的最小子串長度
 * 【舉例】
 * str1="abcde"孙蒙,str2="ac"
 * 因為"abc"包含 str2 所有的字符,并且在滿足這一條件的str1的所有子串中悲雳,"abc"是 最短的挎峦,返回3。
 * str1="12345"怜奖,str2="344" 最小包含子串不存在浑测,返回0翅阵。
 */
public class MinSubStrLen {

    // 建立詞頻表歪玲,和統(tǒng)計str2字符總數(shù)all
    // 遍歷str1每到一個位置讓相應詞頻表--,all--
    // 當all小于0時移動L,
    public static int minSubStrLen(String str1,String str2){

        char[] c1 = str1.toCharArray();
        char[] c2 = str2.toCharArray();
        // 字符從0~255,比如'a'字符的個數(shù)用map[a] = 1
        int[] map = new int[256];

        for(int i = 0;i < c2.length;i++){
            map[c2[i]] += 1;
        }
        int all = str2.length();
        int left = 0;
        int right = 0;
        int min = Integer.MAX_VALUE;
        while (right < str1.length()){
            map[c1[right]]--;
            if(map[c1[right]] >= 0){
                all--;
            }

            if(all == 0){
                // 已經(jīng)把str2遍歷完了,縮小left,left往右移動的過程中只要保持all = 0,那么就是符合題意的子串
                // 當left移動到使all > 0 的時候收集第一當前最小的答案
                while (map[c1[left]] < 0){
                    map[c1[left++]] ++;
                    // 此時all用增加left向右繼續(xù)移動
                }
                // 當移動到一個位置掷匠,使得詞頻表中的某個字符大于0
                min = Math.min(min,right-left+1);
                all++;
                map[c1[left++]]++;
            }

            right ++;
        }

        return min == Integer.MAX_VALUE ? 0 : min;
    }

    public static void main(String[] args) {

        String str1 = "abcde";
        String str2 = "ac";
        System.out.println(minSubStrLen(str1, str2));
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滥崩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子讹语,更是在濱河造成了極大的恐慌钙皮,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異短条,居然都是意外死亡导匣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門茸时,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贡定,“玉大人,你說我怎么就攤上這事可都』捍” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵渠牲,是天一觀的道長旋炒。 經(jīng)常有香客問我,道長签杈,這世上最難降的妖魔是什么瘫镇? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮芹壕,結(jié)果婚禮上汇四,老公的妹妹穿的比我還像新娘。我一直安慰自己踢涌,他們只是感情好通孽,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睁壁,像睡著了一般背苦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潘明,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天行剂,我揣著相機與錄音,去河邊找鬼钳降。 笑死厚宰,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的遂填。 我是一名探鬼主播铲觉,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吓坚!你這毒婦竟也來了撵幽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤礁击,失蹤者是張志新(化名)和其女友劉穎盐杂,沒想到半個月后逗载,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡链烈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年厉斟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片强衡。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡捏膨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出食侮,到底是詐尸還是另有隱情号涯,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布锯七,位于F島的核電站链快,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏眉尸。R本人自食惡果不足惜域蜗,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望噪猾。 院中可真熱鬧霉祸,春花似錦、人聲如沸袱蜡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坪蚁。三九已至奔穿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敏晤,已是汗流浹背贱田。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嘴脾,地道東北人男摧。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像译打,于是被迫代替她去往敵國和親耗拓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

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