力扣——查找和替换模式

你有一个单词列表 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 映射到同一个字母。

提示:

  • 1 <= words.length <= 50
  • 1 <= pattern.length = words[i].length <= 20
class Solution {
    public List<String> findAndReplacePattern(String[] words, String pattern) {
        List<String> res = new ArrayList<>(words.length);
        for (String word : words) {
            if (likePattern(word, pattern)) {
                res.add(word);
            }
        }
        return res;
    }

    public boolean likePattern(String word, String pattern) {
        if (word.length() != pattern.length()) {
            return false;
        }
        char[] wordChars = word.toCharArray();
        boolean[] flagOfLetter = new boolean[26];
        boolean[] flagOfWord = new boolean[wordChars.length];
        for (int i = 0; i < word.length(); i++) {
            int indexOfLetter = pattern.charAt(i) - ‘a‘;
            if (!flagOfWord[i] && !flagOfLetter[indexOfLetter]) {
                char k = wordChars[i];
                flagOfLetter[indexOfLetter] = true;
                // 如果这个字母已经被转化过,那么结束.
                for (int j = i; j < word.length(); j++) {
                    if (wordChars[j] == k && !flagOfWord[j]) {
                        flagOfWord[j] = true;
                        wordChars[j] = pattern.charAt(i);
                    }
                }
            }
        }
        for (int i = 0; i < word.length(); i++) {
            if (wordChars[i] != pattern.charAt(i)) {
                return false;
            }
        }
        return true;

    }
}

原文地址:https://www.cnblogs.com/JAYPARK/p/10513184.html

时间: 2024-10-31 08:56:45

力扣——查找和替换模式的相关文章

890. 查找和替换模式

890. 查找和替换模式 https://leetcode-cn.com/contest/weekly-contest-98/problems/find-and-replace-pattern/ package com.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; //https://leetcode-cn.com/contest/w

[Swift]LeetCode890. 查找和替换模式 | Find and Replace Pattern

You have a list of words and a pattern, and you want to know which words in words matches the pattern. A word matches the pattern if there exists a permutation of letters p so that after replacing every letter x in the pattern with p(x), we get the d

Leetcode-890 查找和替换模式

1 class Solution 2 { 3 public: 4 vector<string> findAndReplacePattern(vector<string>& words, string pattern) 5 { 6 vector<string> result; 7 map<int,int> store; 8 map<int,int> store2; 9 10 for(int i = 0; i < words.size(

[LeetCode] 890. Find and Replace Pattern 查找和替换模式

You have a list of?words?and a?pattern, and you want to know which words in?words?matches the pattern. A word matches the pattern if there exists a permutation of letters?p?so that after replacing every letter?x?in the pattern with?p(x), we get the d

Shell脚本学习指南 [ 第三、四章 ] 查找与替换、文本处理工具

摘要:第三章讨论的是编写Shell脚本时经常用到的两个基本操作.第四章总共介绍了约30种处理文本文件的好用工具. 第三章 查找与替换 概括:本章讨论的是编写Shell脚本时经常用到的两个基本操作:文本查找.文本替换. 3.1  查找文本 如需从输入的数据文件中取出特定的文本行,主要的工具为grep程序.POSIX采用三种不同grep变体:grep.egrep.fgrep整合为单个版本,通过不同的选项,分别提供这三种行为模式.who | grep -F root上面使用-F选项,以查找固定字符串r

vi的查找与替换

0x01 查找 (在命令行模式下) /<要查找的字符>   向下查找要查找的字符 ?<要查找的字符>   向上查找要查找的字符 0x02 替换 (在底行模式下) :0,$s/string1/string2/g 0,$ 替换范围从第0行到最后一行 s 转入替换模式 string1/string2 把所有的string1替换为string2 g 替换一行中所有的string1,否则只替换第一个

linux vim的使用快捷键之查找与替换

查找 /csdn      向下查找一个名称为csdn的字符串 ?csdn   向上查找一个名称为csdn的字符串 n      n是英文字母,表示向下继续查找前一个查找的操作(和上面的操作配合使用) N     N是英文字母,表示向上继续查找前一个查找的操作(和上面的操作配合使用) 替换 :n1,n2s/word1/word2/g n1和n2为数字.表示在n1和n2行之间查询word1,并将这个字符串替换为word2. 例如: :10,20s/csdn/good/g 表示在10到20行之间,把

【python cookbook】【字符串与文本】5.查找和替换文本

问题:对字符串中的文本做查找和替换 解决方案: 1.对于简单模式:str.replace(old, new[, max]) 2.复杂模式:使用re模块中的re.sub(匹配的模式, newstring, oldstring[,替换个数])函数 3.re.subn()可以获得替换的总次数 # example.py # # Examples of simple regular expression substitution import re #simple sample text1='yeah,b

Linux —— 查找与替换

文本查找:    grep, egrep, fgrep        grep:根据基本正则表达式定义的模式搜索文档,并将符合模式的文本行显示出来        注意:搜索时属于部分搜索,只要某一行有某一部分符合模式,就会被显示出来        模式:pattern,文本字符和正则表达式的元字符组合而成的匹配条件    grep 选项 模式 文件    -i:忽略大小写    [email protected]:~/linlin/test$ cat exp.txt   I have a pen