携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
今天是痛苦周日,只因为明天就周一了,遥遥无期的任务
检查单词是否为其他单词的前缀
该题出自力扣的1455题 —— 检查单词是否为其他单词的前缀【简单题】
审题
给你一个字符串 sentence 作为句子并指定检索词为 searchWord ,其中句子由若干用 单个空格 分隔的单词组成。请你检查检索词 searchWord 是否为句子 sentence 中任意单词的前缀。
- 如果 searchWord 是某一个单词的前缀,则返回句子 sentence 中该单词所对应的下标(下标从 1 开始)。如果 searchWord 是多个单词的前缀,则返回匹配的第一个单词的下标(最小下标)。如果 searchWord 不是任何单词的前缀,则返回 -1 。
- 字符串 s 的 前缀 是 s 的任何前导连续子字符串。
-
该题题意确实很简单,毕竟是简单题,因此直接暴力过也可以
-
给出两个字符串,第一个字符串用空格作为分割的单词组,第二个字符串作为前缀的识别
-
因此选择用暴力
- 利用String 的 split方法,切割字符串得到数组
- 遍历字符串数组
- 因为是前缀,所以不能直接使用contain方法,可以另辟蹊径
- 先判断长度是否大于前缀字符串
- 在利用subString方法,截取长度的前缀,通过截取的前缀,使用equal方法判断是否相等
- 最后返回当前下标的 + 1
-
也可以直接调库
- 使用String的startWith方法
- 本质上也是利用了string转char数组,再循环长度进行判断
public boolean startsWith(String prefix, int toffset) {
char ta[] = value;
int to = toffset;
char pa[] = prefix.value;
int po = 0;
int pc = prefix.value.length;
// Note: toffset might be near -1>>>1.
if ((toffset < 0) || (toffset > value.length - pc)) {
return false;
}
while (--pc >= 0) {
if (ta[to++] != pa[po++]) {
return false;
}
}
return true;
}
编码
class Solution {
public int isPrefixOfWord(String sentence, String searchWord) {
String[] s = sentence.split(" ");
int n = searchWord.length();
for (int i = 0;i<s.length;i++) {
if (s[i].length() >= n) {
if (s[i].substring(0, n).equals(searchWord)) {
return i +1;
}
}
}
return -1;
}
}