【每日一题记录】1455. 检查单词是否为句中其他单词的前缀

97 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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
};

image.png

这里的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;
};

image.png

我是短袖撸码蒂尔尼
一名热爱阿森纳的前端工程师
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!

名片.jpg