【Leetcode_总结】890. 查找和替换模式 - python

Q:

你有一个单词列表 words 和一个模式  pattern,你想知道 words 中的哪些单词与模式匹配。

如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。

(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)

返回 words 中与给定模式匹配的单词列表。

你可以按任何顺序返回答案。

示例:

输入:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"
输出:["mee","aqq"]
解释:
"mee" 与模式匹配,因为存在排列 {a -> m, b -> e, ...}。
"ccc" 与模式不匹配,因为 {a -> c, b -> c, ...} 不是排列。
因为 a 和 b 映射到同一个字母。

链接:https://leetcode-cn.com/problems/find-and-replace-pattern/

思路:建立两个词典,分别做映射,然后如果后面的字符在词典中,比较其与词典的值

代码:

class Solution:
    def findAndReplacePattern(self, words, pattern):
        """
        :type words: List[str]
        :type pattern: str
        :rtype: List[str]
        """
        pattern_list = [pattern for _ in range(len(words))]
        temp = zip(words, pattern_list)
        res = []
        for t in temp:
            dic = {}
            dic2 = {}
            flag = True
            for i in range(len(t[0])):
                if t[1][i] not in dic:
                    dic[t[1][i]] = t[0][i]
                else:
                    if dic[t[1][i]] != t[0][i]:
                        flag = False
                if t[0][i] not in dic2:
                    dic2[t[0][i]] = t[1][i]
                else:
                    if dic2[t[0][i]] != t[1][i]:
                        flag = False
            if flag:
                res.append(t[0])
        return res

猜你喜欢

转载自blog.csdn.net/maka_uir/article/details/85392001