开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天,点击查看活动详情
题目 leetcode.cn/
-
给你一个字符串
sentence作为句子并指定检索词为searchWord,其中句子由若干用 单个空格 分隔的单词组成。请你检查检索词searchWord是否为句子sentence中任意单词的前缀。 -
如果
searchWord是某一个单词的前缀,则返回句子sentence中该单词所对应的下标(下标从 1 开始)。如果searchWord是多个单词的前缀,则返回匹配的第一个单词的下标(最小下标)。如果searchWord不是任何单词的前缀,则返回-1****。 -
字符串
s的 前缀 是s的任何前导连续子字符串。 -
示例 1:
- 输入: sentence = "i love eating burger", searchWord = "burg"
- 输出: 4
- 解释: "burg" 是 "burger" 的前缀,而 "burger" 是句子中第 4 个单词。
-
示例 2:
- 输入: sentence = "this problem is an easy problem", searchWord = "pro"
- 输出: 2
- 解释: "pro" 是 "problem" 的前缀,而 "problem" 是句子中第 2 个也是第 6 个单词,但是应该返回最小下标 2 。
-
示例 3:
- 输入: sentence = "i am tired", searchWord = "you"
- 输出: -1
- 解释: "you" 不是句子中任何单词的前缀。
提示:
1 <= sentence.length <= 1001 <= searchWord.length <= 10sentence由小写英文字母和空格组成。searchWord由小写英文字母组成。
代码
function isPrefixOfWord(sentence: string, searchWord: string): number {
let sentenceArr = sentence.split(' ');
let reg = new RegExp("^" + searchWord);
for(let k = 0; k < sentenceArr.length; k++){
if(reg.test(sentenceArr[k])){
return k + 1;
}
}
return -1;
};
- 正则校验:
- 这种检测是不是前缀还是是不是后缀的,首先第一时间想到的就是正则校验,方便还好用
- 首先将给定的句子按照空格拆分成单个单词的字符串数组
- 然后遍历整个数组,挨个使用上面定义好的正则去校验,如果校验通过,就返回当前的下标值(因为单词下标是从一开始,需要加上一)
- 如果所有单词都检测完,说明没有符合的单词,返回
-1
function isPrefixOfWord(sentence: string, searchWord: string): number {
let sentenceArr = sentence.split(' ');
for(let k = 0; k < sentenceArr.length; k++){
if(sentenceArr[k].substring(0, searchWord.length) === searchWord){
return k + 1;
}
}
return -1;
};
- 字符串读取:
- 将字符串句子拆分成单词数组是必要的,方便后续遍历查找
- 这里不再对每一项进行正则校验,而是将每一项按照给定的查找前缀长度,取出一样的字符串看是否相等
- 如果相等,则说明当前项是符合前缀的,返回当前下标加一后的结果
- 如果都不相等,则返回
-1