LC 1455.Check If a Word Occurs As a Prefix of Any Word in a Sentence

题目描述

这是 LeetCode 上的 1455. 检查单词是否为句中其他单词的前缀 ,难度为简单

给你一个字符串 sentence 作为句子并指定检索词为 searchWord ,其中句子由若干用 单个空格 分隔的单词组成。请你检查检索词 searchWord 是否为句子 sentence 中任意单词的前缀。

如果 searchWord 是某一个单词的前缀,则返回句子 sentence 中该单词所对应的下标(下标从 1 开始)。如果 searchWord 是多个单词的前缀,则返回匹配的第一个单词的下标(最小下标)。如果 searchWord 不是任何单词的前缀,则返回 -1

字符串 s前缀s 的任何前导连续子字符串。

示例 1:

1
2
3
输入:sentence = "i love eating burger", searchWord = "burg"
输出:4
解释:"burg" 是 "burger" 的前缀,而 "burger" 是句子中第 4 个单词。

示例 2:

1
2
3
输入:sentence = "this problem is an easy problem", searchWord = "pro"
输出:2
解释:"pro" 是 "problem" 的前缀,而 "problem" 是句子中第 2 个也是第 6 个单词,但是应该返回最小下标 2 。

示例 3:

1
2
3
输入:sentence = "i am tired", searchWord = "you"
输出:-1
解释:"you" 不是句子中任何单词的前缀。

提示:

  • 1 <= sentence.length <= 100
  • 1 <= searchWord.length <= 10
  • sentence 由小写英文字母和空格组成。
  • searchWord 由小写英文字母组成。

解答

方法一:模拟

根据题目模拟,先将句子分割成单词,然后判断单词的长度是否比搜索字符的长度要长,最后根据匹配的要求返回值就行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int isPrefixOfWord(String sentence, String searchWord) {
String[] words = sentence.split(" ");
for (int j = 0; j < words.length; ++j) {
if (words[j].length() >= searchWord.length()) {
boolean flag = true;
for (int i = 0; i < searchWord.length(); ++i) {
if (searchWord.charAt(i) != words[j].charAt(i)) {
flag = false;
break;
}
}
if (flag) {
return j + 1;
}
}
}
return -1;
}
}
  • 时间复杂度\(O(n \times m)\), 其中 nsentence 的长度,而 m 是最长的单词的长度, Javasplit 方法的时间复杂度为 \(O(n)\),而遍历每个单词并做匹配的时间复杂度为 \(O(n \times m)\) ,所以总的时间复杂度为 \(O(n \times m)\)

  • 空间复杂度\(O(n)\),分割 sentencesplit 方法的空间复杂度为 \(O(n)\),其中 nsentence 的长度。

每题一图


LC 1455.Check If a Word Occurs As a Prefix of Any Word in a Sentence
https://chen-huaneng.github.io/2023/12/06/2023-12-6-2023-12-06-lc-1455/
作者
Abel
发布于
2023年12月6日
更新于
2023年12月6日
许可协议