python基础实战(LeetCode)之字符串(4)

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

难度: 简单

给你一个字符串 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
 

提示:

1 <= sentence.length <= 100
1 <= searchWord.length <= 10
sentence 由小写英文字母和空格组成。
searchWord 由小写英文字母组成。
前缀就是紧密附着于词根的语素,中间不能插入其它成分,并且它的位置是固定的——-位于词根之前。

思路:

  • sentence 作为句子由若干用 单个空格 分隔的单词组成。那么可以用空格切割
  • 切割完再与searchWord 对比
class Solution:
    def isPrefixOfWord(self, sentence: str, searchWord: str) -> int:
    	# 切割
        sentence = sentence.split(" ")
        for i in sentence:
        	# 判断长度
            if len(i) >= len(searchWord):
            	# 判断前缀
                if i[:len(searchWord)] == searchWord:
                    return sentence.index(i)+1    
        else:               
            return -1

===========================================================

1170. 比较字符串最小字母出现频次

我们来定义一个函数 f(s),其中传入参数 s 是一个非空字符串;该函数的功能是统计 s 中(按字典序比较)最小字母的出现频次。

例如,若 s = “dcce”,那么 f(s) = 2,因为最小的字母是 “c”,它出现了 2 次。

现在,给你两个字符串数组待查表 queries 和词汇表 words,请你返回一个整数数组 answer 作为答案,其中每个
answer[i] 是满足 f(queries[i]) < f(W) 的词的数目,W 是词汇表 words 中的词。

示例 1:
输入:queries = ["cbd"], words = ["zaaaz"]
输出:[1]
解释:查询 f("cbd") = 1,而 f("zaaaz") = 3 所以 f("cbd") < f("zaaaz")。

示例 2:
输入:queries = ["bbb","cc"], words = ["a","aa","aaa","aaaa"]
输出:[1,2]
解释:第一个查询 f("bbb") < f("aaaa"),第二个查询 f("aaa") 和 f("aaaa")> f("cc")

提示:

1 <= queries.length <= 2000
1 <= words.length <= 2000
1 <= queries[i].length, words[i].length <= 10
queries[i][j], words[i][j] 都是小写英文字母

思路:
直接暴力

class Solution:
    def numSmallerByFrequency(self, queries: List[str], words: List[str]) -> List[int]:
    	# 找出最小字母的次数
        que_a = [i.count(sorted(i)[0]) for i in queries]
        word_a = [i.count(sorted(i)[0]) for i in words]

        res = []
		
        for i in que_a:
            n = 0
            for j in word_a:
            	# 对比
                if i < j:
                    n  += 1
            res.append(n)
        return res

==========================================================

1408. 数组中的字符串匹配

给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words
中是其他单词的子字符串的所有单词。

如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[i] ,那么字符串 words[i] 就是 words[j]
的一个子字符串。

示例 1:
输入:words = ["mass","as","hero","superhero"]
输出:["as","hero"]
解释:"as""mass" 的子字符串,"hero""superhero" 的子字符串。
["hero","as"] 也是有效的答案。

示例 2:
输入:words = ["leetcode","et","code"]
输出:["et","code"]
解释:"et""code" 都是 "leetcode" 的子字符串。

示例 3:
输入:words = ["blue","green","bu"]
输出:[]

提示:

1 <= words.length <= 100
1 <= words[i].length <= 30
words[i] 仅包含小写英文字母。
题目数据 保证 每个 words[i] 都是独一无二的。

class Solution:
    def stringMatching(self, words: List[str]) -> List[str]:
        res = []
        for i in words:
            for j in words:
                if i != j:
                    if i in j:
                        res.append(i)
                        break
                        
        return res

版权声明:本文为weixin_51211600原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。