LeetCode2255

LeetCode.2255:统计是给定字符串前缀的字符串数目

​ 一道简单难度的题,注意边缘,注意逻辑即可,API练习题。

题目描述

给你一个字符串数组words和一个字符串s,其中words[i]s只包含 小写英文字母

请你返回words中是字符串s前缀 的 字符串数目

一个字符串的 前缀 是出现在字符串开头的子字符串。子字符串 是一个字符串中的连续一段字符序列。

示例

示例1:

1
2
3
4
5
6
输入:words = ["a","b","c","ab","bc","abc"], s = "abc"
输出:3
解释:
words 中是 s = "abc" 前缀的字符串为:
"a" ,"ab" 和 "abc" 。
所以 words 中是字符串 s 前缀的字符串数目为 3 。

示例2:

1
2
3
4
5
输入:words = ["a","a"], s = "aa"
输出:2
解释:
两个字符串都是 s 的前缀。
注意,相同的字符串可能在 words 中出现多次,它们应该被计数多次。

提示:

1
2
3
1 <= words.length <= 1000
1 <= words[i].length, s.length <= 10
words[i] 和 s 只 包含小写英文字母。

题解

​ 直接遍历words中的每一个字符串word,如果words长,则word必然不可能是s的前缀,此后对words同时从左至右比对,如果word中任意一个与s中的不一致则其不是s前缀,直到word完全比对完成,比对完成后仍然没触发前面提到的条件则认为words的一个前缀,ans + 1.

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public int countPrefixes(String[] words, String s) {
int ans = 0;
int n = words.length;
for(String word : words){ //使用了foreach
boolean flag = true;
int word_len = word.length();
int s_len = s.length();
if(s_len < word_len){
continue;
}
for(int i = 0; i < word_len; i++){
if(word.charAt(i)-s.charAt(i)!=0){
flag = false;
break;
}
}
if(flag){
ans += 1;
}
}
return ans;
}
}