Problem
Given a sentence that consists of some words separated by a single space, and a searchWord, check if searchWord is a prefix of any word in sentence.
Return the index of the word in sentence (1-indexed) where searchWord is a prefix of this word. If searchWord is a prefix of more than one word, return the index of the first word (minimum index). If there is no such word return -1.
A prefix of a string s is any leading contiguous substring of s.
https://leetcode.com/problems/check-if-a-word-occurs-as-a-prefix-of-any-word-in-a-sentence/
Example 1:
Input:
sentence = "i love eating burger", searchWord = "burg"
Output:4
Explanation:"burg"is prefix of"burger"which is the 4th word in the sentence.
Example 2:
Input:
sentence = "this problem is an easy problem", searchWord = "pro"
Output:2
Explanation:"pro"is prefix of"problem"which is the 2nd and the 6th word in the sentence, but we return2as it’s the minimal index.
Example 3:
Input:
sentence = "i am tired", searchWord = "you"
Output:-1
Explanation:"you"is not a prefix of any word in the sentence.
Constraints:
1 <= sentence.length <= 1001 <= searchWord.length <= 10sentenceconsists of lowercase English letters and spaces.searchWordconsists of lowercase English letters.
Test Cases
1 | class Solution: |
1 | import pytest |
Thoughts
第一反应是用 Trie 树,但单次搜索就没必要了,不等 Trie 建好就查完了。
因为给定的是一个句子,而非单词的数组,肯定要避免做 split 以节省时间和空间。
直接遍历句子中的每一个字符,在每个空格之后跟 searchWord 对齐逐个比对即可。
时间复杂度 O(n),空间复杂度 O(1)。
Code
1 | class Solution: |