携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情
大家好 我是短袖撸码蒂尔尼。今天带来的是一道在LeetCode上的题目,题目难度为简单。就在此为大家分享一下解答思路。
题目阐述
给你一个字符串 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 个单词。
原题连接
思路阐述
题目简单 追求一题多解
这个题目比较简单,有两个思路,一个是用正则表达式去匹配对应的sentence判断,第二个思路是使用双指针。
正则表达式
这里使用了用变量表达正则表达式的方法:
function isPrefixOfWord(sentence: string, searchWord: string): number {
let arr=sentence.split(' ')
let reg=new RegExp('^'+searchWord+'')
for (let i=0;i<arr.length;i++){
if(reg.test(arr[i]))
return i+1
}
return -1
};
这里的let reg=new RegExp('^'+searchWord+'')就是通过变量searchWord创建一个含有该变量的正则表达式对象。
双指针
这里记录了三个变量
| 变量名 | 作用 |
|---|---|
| index | 记录当前单词下标 |
| start | 起始指针 |
| end | 终止指针 |
对于区间 [start,end) 对应的单词,判断它是否存在某一前缀等于 searchWord,如果存在直接返回该单词对应的下标 index;如果遍历完所有单词都不符合条件,返回 -1。
function isPrefixOfWord(sentence:string, searchWord:string):number {
let n = sentence.length, index = 1, start = 0, end = 0;
while (start < n) {
while (end < n && sentence[end] !== ' ') {
end++;
}
if (isPrefix(sentence, start, end, searchWord)) {
return index;
}
index++;
end++;
start = end;
}
return -1;
}
function isPrefix (sentence:string, start:number, end:number, searchWord:string):boolean{
for (let i = 0; i < searchWord.length; i++) {
if (start + i >= end || sentence[start + i] !== searchWord[i]) {
return false;
}
}
return true;
};
我是短袖撸码蒂尔尼
一名热爱阿森纳的前端工程师
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!