此博客连接:https://www.cnblogs.com/ping2yingshi/p/14008473.html
检查单词是否为句中其他单词的前缀
题目链接:https://leetcode-cn.com/problems/check-if-a-word-occurs-as-a-prefix-of-any-word-in-a-sentence/
题目内容
给你一个字符串 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" 不是句子中任何单词的前缀。
示例 4:
输入:sentence = "i use triple pillow", searchWord = "pill"
输出:4
示例 5:
输入:sentence = "hello from the other side", searchWord = "they"
输出:-1
题解
思路
先把句子拆分为单词,存到一个数组中(因为要返回下标)。然后用前缀和单词做比较,看前缀是否为单词的前缀。
错误思想
一开始单词和前缀是使用前缀和单词中的每个字母比较,使用了三层循环,先遍历每个单词,其次遍历单词中的每个字母,遍历前缀中的每个字母,当单词中的字母和前缀中的字母不相同时,就跳出二层循环,但是这里有个问题,就是第二层循环和第三层循环不是同事进行的,所以会导致前缀中的所有字母都和单词中的每个字母比较一遍,这样肯定不合理。
正确思想
后来想到使用java中自带的判断字符串中是否包含另外一个字符串的contains()函数,当单词中包含前缀并且单词中的第一个字母和前缀中的第一个字母相同,即是前缀。
代码
错误代码
class Solution { public int isPrefixOfWord(String sentence, String searchWord) { String word []=sentence.split(" "); for(int i=0;i<word.length();i++) { flag: for(int j=0;j<word[i].length;j++) { for(int k=0;k<searchWord.length;k++) { if(word[i].charAt(j)!=searchWord.chatAt(k)) { break flag; } else { return i+1; } } } } return i+1; } }
正确代码