1455. 检查单词是否为句中其他单词的前缀

118 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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 <= 100
  • 1 <= searchWord.length <= 10
  • sentence 由小写英文字母和空格组成。
  • 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