【LeetCode】检查单词是否为句中其他单词的前缀Java题解

90 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第32天,点击查看活动详情

题目描述

给你一个字符串 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" 不是句子中任何单词的前缀。


来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/check-if-a-word-occurs-as-a-prefix-of-any-word-in-a-sentence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路分析

  • 今天的算法题目是字符串处理题目,题目描述比较长,我们需要查找 "searchWord 是否为句子 sentence 中任意单词的前缀"。理解这句话,searchWord 是 sentence 的子集且索引位置是0。
  • 我们首先将 sentence 字符串按照 " " 切分,转化为 sentenceArr 数组,然后依次判断 searchWord 是否是每个单词的前缀。由于我们只需要返回最小下标, 我们找到第一个下标即可跳出循环。在Java中,我们一般使用 indexOf 判断包含关系,当包含关系不存在的时候,返回 -1。让存在的时候,返回存在具体的索引位置。
  • 具体实现代码如下,供参考。

通过代码

class Solution {
    public int isPrefixOfWord(String sentence, String searchWord) {
        int ans = -1;
        String[] sentenceArr = sentence.split(" ");
        int n = sentenceArr.length;
        for (int i = 0; i < n; i++) {
            if (sentenceArr[i].indexOf(searchWord) == 0) {
                ans = i + 1;
                break;
            }
        }
        return ans;
    }
}

总结

  • 上述代码的时间复杂度是O(n), 空间复杂度是O(1)
  • 坚持算法每日一题,加油!