1.最后一個(gè)單詞長(zhǎng)度
原題:
Java:
C語言:
2. 同分異構(gòu)體
我們都知道化學(xué)中有同分異構(gòu)體這么一概念
同化學(xué)中分子一樣茄靠,英語也有同分異構(gòu)體
了解同分異構(gòu)體的概念之后加叁,來看看了leetcode242題
總體思想:
- 想辦法把s與t寫成形如a2b0c4…z1的分子式形式
- 判斷2個(gè)分子式是否相同
具體思路: - 建立2個(gè)長(zhǎng)度為26的數(shù)組,分別代表s與t的分子式
- 分別遍歷s與t钱豁,填充相應(yīng)的分子式
如果2個(gè)分子式局扶,每個(gè)字母出現(xiàn)的次數(shù)都相同,就返回true怪蔑,否則返回false
3 翻轉(zhuǎn)單詞順序
問題描述
分析:聯(lián)想到之前的旋轉(zhuǎn)數(shù)組,可以分別旋轉(zhuǎn)每一個(gè)單詞然后再旋轉(zhuǎn)整個(gè)字符串丧荐。
實(shí)現(xiàn)代碼
進(jìn)階:leetcode151題
注意:英文句子開始可能有N個(gè)空格缆瓣,單詞之間可能有N個(gè)空格,句子尾部可能有N個(gè)空格虹统;
所以解決這題的重點(diǎn)就是:去除掉句子首位的空格弓坞,和去除單詞之間數(shù)量大于1 的空格隧甚;
思路:
- 對(duì)于頭尾空格,可以定義頭尾指針不斷地向中間收縮并判斷:start++,end--;可以用兩個(gè)while循環(huán)來實(shí)現(xiàn)昼丑,當(dāng)退出循環(huán)時(shí)start和end之間就是沒有首尾空格的句子呻逆。(代碼中j相當(dāng)于start,len-1相當(dāng)于end)
- 接下來去除單詞中間的空格菩帝,這里可以定義一個(gè)flag來標(biāo)記連續(xù)空格的數(shù)量,當(dāng)遇到非空格(字母)的時(shí)候flag清零茬腿。每次遇見空格的時(shí)候進(jìn)行判斷:
如果flag=0呼奢,說明之前沒有錄入空格,可以錄入當(dāng)前空格切平。如果flag大于零則跳過當(dāng)前空格握础。 - 最后在字符數(shù)組最后補(bǔ)個(gè)0表示字符串結(jié)束。
實(shí)現(xiàn)代碼:
4 leetcode 38 Count and Say
思路:
(當(dāng)n=10的迭代結(jié)果)
統(tǒng)計(jì)每個(gè)數(shù)字出現(xiàn)的次數(shù)悴品,并把本次得到的結(jié)果字符串作為下一次的當(dāng)前字符串禀综。
實(shí)現(xiàn)代碼:
5模式匹配
模式匹配的概念
了解概念后來看下leetcode28題(easy)
問題描述
leetCode 28:Implement strStr()
返回needle在haystack中的第一個(gè)出現(xiàn)位置
如果沒找到,返回-1苔严。
不允許直接使用indexOf方法定枷!
BF算法的思路
Java String.index方法也是暴力算法
判斷i指針開始到(i+字串長(zhǎng)度的位置)的字符串是否與字串相等,如果相等返回i届氢,否則i++重新判斷欠窒。
實(shí)現(xiàn)代碼:
空間O(1),時(shí)間O(m*n)
kmp算法
從頭到尾徹底理解 KMP
示例代碼:
kmp算法的重點(diǎn)在于next數(shù)組的創(chuàng)建退子, next[j]代表當(dāng)匹配不成功的時(shí)候模式串當(dāng)前的指針應(yīng)該移動(dòng)到的位置j=next[j]岖妄。
同理next[k]也可以理解為當(dāng)前綴與模式串匹配不成功時(shí)當(dāng)前k應(yīng)該移動(dòng)的位置,next數(shù)組的創(chuàng)建相當(dāng)于模式串的前綴(當(dāng)做字串)與模式串(當(dāng)做父串)從尾開始的(敲黑板<畔椤<雠啊!)一個(gè)匹配過程:
如圖所示:可以當(dāng)做模式串ABCDABEABCDABC
中的前綴串ABCDABE進(jìn)行匹配:此時(shí)j=13,k=6丸凭,匹配不成功福扬;此時(shí)應(yīng)該怎樣?直接跳轉(zhuǎn)到k=0從頭開始匹配嗎贮乳?
仔細(xì)觀察前綴字串:ABCDABE,因?yàn)閖=C與K=6已經(jīng)不匹配了忧换,不可能匹配到K>=6的字串。所以可以嘗試找比k小的字串向拆。
之前說了next數(shù)組的定義就是當(dāng)字串匹配到n的時(shí)候發(fā)現(xiàn)不匹配亚茬,字串指針n應(yīng)該向左挪到的位置(不是向左移動(dòng)的距離,是直接n=next[n]),這個(gè)數(shù)組對(duì)于模式串匹配文本串適用浓恳,也就是對(duì)j適用,就是j=next[j]刹缝。同時(shí)對(duì)前綴字串與模式串匹配也適用碗暗,也就是k=next[k];
創(chuàng)建整個(gè)next數(shù)組時(shí),前綴字串與模式串的比對(duì)過程大概如圖: