题目
题解
双指针,s和word各一个指针,对words[]数组里的单词进行逐个判断
class Solution {
public int expressiveWords(String s, String[] words) {
int res=0;
for(String word:words){
if(expand(s,word))
res++;
}
return res;
}
public boolean expand(String s,String t){
int i=0,j=0,n=s.length(),m=t.length();
while(i<n&&j<m){
//字母都不一样,肯定不是扩张的结果
if(s.charAt(i)!=t.charAt(j))
return false;
//s,t相同字母,统计出现次数
int cnti=0,cntj=0;
char ch=s.charAt(i);
while(i<n&&s.charAt(i)==ch){
cnti++;
i++;
}
while(j<m&&t.charAt(j)==ch){
cntj++;
j++;
}
if(cnti<cntj)
return false;
//达不到“扩张”要求
if(cnti!=cntj&&cnti<3)
return false;
}
return i==n&&j==m;
}
}
时间复杂度: O ( n ∣ s ∣ + ∑ ∣ w o r d s ∣ ) O(n∣s∣+∑ ∣words∣) O(n∣s∣+∑∣words∣)
空间复杂度: O ( 1 ) O(1) O(1)