leetcode809. 情感丰富的文字
有時(shí)候人們會(huì)用重復(fù)寫(xiě)一些字母來(lái)表示額外的感受,比如 “hello” -> “heeellooo”, “hi” -> “hiii”。我們將相鄰字母都相同的一串字符定義為相同字母組,例如:“h”, “eee”, “l(fā)l”, “ooo”。
對(duì)于一個(gè)給定的字符串 S ,如果另一個(gè)單詞能夠通過(guò)將一些字母組擴(kuò)張從而使其和 S 相同,我們將這個(gè)單詞定義為可擴(kuò)張的(stretchy)。擴(kuò)張操作定義如下:選擇一個(gè)字母組(包含字母 c ),然后往其中添加相同的字母 c 使其長(zhǎng)度達(dá)到 3 或以上。
例如,以 “hello” 為例,我們可以對(duì)字母組 “o” 擴(kuò)張得到 “hellooo”,但是無(wú)法以同樣的方法得到 “helloo” 因?yàn)樽帜附M “oo” 長(zhǎng)度小于 3。此外,我們可以進(jìn)行另一種擴(kuò)張 “l(fā)l” -> “l(fā)llll” 以獲得 “helllllooo”。如果 S = “helllllooo”,那么查詢(xún)?cè)~ “hello” 是可擴(kuò)張的,因?yàn)榭梢詫?duì)它執(zhí)行這兩種擴(kuò)張操作使得 query = “hello” -> “hellooo” -> “helllllooo” = S。
輸入一組查詢(xún)單詞,輸出其中可擴(kuò)張的單詞數(shù)量。
示例:
輸入:
S = “heeellooo”
words = [“hello”, “hi”, “helo”]
輸出:1
解釋:
我們能通過(guò)擴(kuò)張 “hello” 的 “e” 和 “o” 來(lái)得到 “heeellooo”。
我們不能通過(guò)擴(kuò)張 “helo” 來(lái)得到 “heeellooo” 因?yàn)?“l(fā)l” 的長(zhǎng)度小于 3 。
代碼
class Solution {public int expressiveWords(String S, String[] words) {int n=S.length(),res=0;if (n==0) return 0;int[] jump=new int[n];//記錄出現(xiàn)的多個(gè)連續(xù)重復(fù)字符的末尾位置jump[n-1]=n-1;for(int i=n-2;i>=0;i--){if(S.charAt(i)==S.charAt(i+1))jump[i]=jump[i+1];else jump[i]=i;}for(String string:words)//遍歷words{int start=0,i=0;for(;i<string.length()&&start<n;i++)//遍歷單詞的每個(gè)字符{if(string.charAt(i)==S.charAt(start))//相同字符{int len=1;while (i+1<string.length()&&string.charAt(i)==string.charAt(i+1))//找出后面相同字符的長(zhǎng)度{i++;len++;}int len2=jump[start]+1-start;//根據(jù)jump數(shù)組直接得出最后一個(gè)重復(fù)字符的位置if(len2<=2&&len2!=len||len>len2) //當(dāng)S中字符連續(xù)的長(zhǎng)度小于2,不能任意匹配長(zhǎng)度,必須和word連續(xù)的長(zhǎng)度相同break;start=jump[start]+1;}else break;}if(i==string.length()&&start==n) res++;}return res;} }總結(jié)
以上是生活随笔為你收集整理的leetcode809. 情感丰富的文字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: leetcode1053. 交换一次的先
- 下一篇: 频繁梦到一个人对方有感应吗