输入一组查询单词,输出其中可扩张的单词数量。
示例:
**输入:** s = "heeellooo" words = ["hello", "hi", "helo"] **输出:**1 **解释**: 我们能通过扩张 "hello" 的 "e" 和 "o" 来得到 "heeellooo"。 我们不能通过扩张 "helo" 来得到 "heeellooo" 因为 "ll" 的长度小于 3 。
提示:
1 <= s.length, words.length <= 100
1 <= words[i].length <= 100
- s 和所有在
words
中的单词都只由小写字母组成。
解题思路:1、本题题意 即是从字符串数组中找到若干个可以通过字母扩张得到原字符串的数量
2、本题可以使用双指针来完成,即指定 i、j 分别为给定单词以及数组中某个字符串的的指针,指向第一个字符。
3、可以编写一个boolean方法来判断符合条件的字符串数量。
4、当给定字符小于某个字符串时,即可判断该字符串不可能是符合条件的,直接return。
5、设置Count_s、Count_t来累积初始两个字符串的相同字母数量
6、展开分类讨论,因为如题当s中字母数量小于3时无法扩张,即如果需要符合条件,t字符串中某字母数量需与s相同。
7、如果Count_s小于Count_t,直接return,如果Count_s与Count_t数量不同,且Count_s<3,即可判断该字符串不合条件。
8、最后如果循环结束都为边界值,即比对都符合条件,则为true,否则为false。
代码实现
public static int expressiveWords(String s, String[] words) {
int count=0;
for (String str:words){
if (ComPare(s,str))
count++;
}
return count;
}
public static boolean ComPare(String s,String t){
if (s.length()<t.length())
return false;//长度大于S不合条件
int i=0,j=0;
while (i<s.length()&&j<t.length()) {
if (s.charAt(i) != t.charAt(j))
return false;//开始即不相同,不合条件
char ch=s.charAt(i);
int Count_s=0;
while (i<s.length()&&s.charAt(i)==ch){
++Count_s;
++i;
}
int Count_t=0;
while (j<t.length()&&t.charAt(j)==ch){
++Count_t;
++j;
}
if (Count_t>Count_s)//相同字母大于s相同字母数量,不合条件
![img](https://img-blog.csdnimg.cn/img_convert/edfffb9db7486439c98e9daed196c5c8.png)
![img](https://img-blog.csdnimg.cn/img_convert/cc4d7a5420bfeee4b65b61ffdc20fe5e.png)
![img](https://img-blog.csdnimg.cn/img_convert/9b33574b8597073cdff5307b784e9e9c.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**