摘要:前言的的題目查找和替換模式,原題目描述如下你有一個(gè)單詞列表和一個(gè)模式,你想知道中的哪些單詞與模式匹配。如果存在字母的排列,使得將模式中的每個(gè)字母替換為之后,我們就得到了所需的單詞,那么單詞與模式是匹配的。
前言
LeetCode的Weekly Contest 98的題目查找和替換模式,原題目描述如下:
你有一個(gè)單詞列表 words 和一個(gè)模式 pattern,你想知道 words 中的哪些單詞與模式匹配。解題思路
如果存在字母的排列 p ,使得將模式中的每個(gè)字母 x 替換為 p(x) 之后,我們就得到了所需的單詞,那么單詞與模式是匹配的。
(回想一下,字母的排列是從字母到字母的雙射:每個(gè)字母映射到另一個(gè)字母,沒有兩個(gè)字母映射到同一個(gè)字母。)
返回 words 中與給定模式匹配的單詞列表。
你可以按任何順序返回答案。示例:
輸入:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"
輸出:["mee","aqq"]
解釋:
"mee" 與模式匹配,因?yàn)榇嬖谂帕?{a -> m, b -> e, ...}。
"ccc" 與模式不匹配,因?yàn)?{a -> c, b -> c, ...} 不是排列。
因?yàn)?a 和 b 映射到同一個(gè)字母。
這道題目其實(shí)就是需要用一個(gè)數(shù)據(jù)結(jié)構(gòu)去描述單詞和模式之間的映射關(guān)系,而且模式和單詞中的字母的關(guān)系是一對(duì)一,所以可以直接使用Map去解決這個(gè)問題。
實(shí)現(xiàn)代碼/** * 查找和替換模式 * @param words * @param pattern * @return */ public ListfindAndReplacePattern(String[] words, String pattern) { List result = new ArrayList<>(); char[] patternChars = pattern.toCharArray(); for (String word : words) { char[] wordChars = word.toCharArray(); //是否匹配 boolean match = true; //用于存儲(chǔ)映射關(guān)系的Map Map map = new HashMap<>(); for (int i = 0; i < patternChars.length; i++) { char p = patternChars[i]; char w = wordChars[i]; if (map.containsKey(p)) {//模式中的字母是否已經(jīng)映射已經(jīng)被映射 char value = map.get(p); if (value != w) { match = false; break; } } else { if(map.containsValue(w)){//判斷單詞中的字母是否被映射,防止模式多個(gè)字母都映射單詞中的同一個(gè)字母 match = false; break; }else { map.put(p, w); } } } if (match) { result.add(word); } } return result; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76797.html
摘要:正則表達(dá)式對(duì)象通過內(nèi)置對(duì)象支持正則表達(dá)式。做法很簡(jiǎn)單,就是在量詞后添加一個(gè)即可分組分組或分組取值前瞻正則表達(dá)式是從文本頭部向尾部解析。 正則表達(dá)式 REGEXP對(duì)象 javascript通過內(nèi)置對(duì)象Regexp支持正則表達(dá)式。 兩種方法來創(chuàng)建Regexp對(duì)象。 1、字面量 var reg = /d{4}/g; // g 表示進(jìn)行全局替換 2、構(gòu)造函數(shù) var reg = new R...
摘要:字符串常用功能移除空白分割長(zhǎng)度索引切片下面來詳細(xì)介紹下字符串首字母大寫將所有大寫變小寫支持多種國(guó)家語(yǔ)言將大寫變成小寫只支持英文文本居中參數(shù)表示總長(zhǎng)度參數(shù)空白處填充的字符長(zhǎng)度為左右填充,包含自身長(zhǎng)度表示傳入之在字符串中出現(xiàn)的次數(shù)參數(shù)要查找的值 字符串常用功能: 移除空白 分割 長(zhǎng)度 索引 切片 下面來詳細(xì)介紹下 ~ capitalize 字符串首字母大寫 name = xmzncc ...
摘要:正則大法好,正則大法好,正則大法好,重要的事情說三遍。第二部分,這個(gè)部分是整個(gè)表達(dá)式的關(guān)鍵部分。學(xué)習(xí)正則如果還沒有系統(tǒng)學(xué)習(xí)正則表達(dá)式,這里提供一些網(wǎng)上經(jīng)典的教程供大家學(xué)習(xí)。正則表達(dá)式使用單個(gè)字符串來描述匹配一系列匹配某個(gè)句法規(guī)則的字符串。 原文收錄在我的 GitHub博客 (https://github.com/jawil/blog) ,喜歡的可以關(guān)注最新動(dòng)態(tài),大家一起多交流學(xué)習(xí),共同...
摘要:正則大法好,正則大法好,正則大法好,重要的事情說三遍。第二部分,這個(gè)部分是整個(gè)表達(dá)式的關(guān)鍵部分。學(xué)習(xí)正則如果還沒有系統(tǒng)學(xué)習(xí)正則表達(dá)式,這里提供一些網(wǎng)上經(jīng)典的教程供大家學(xué)習(xí)。正則表達(dá)式使用單個(gè)字符串來描述匹配一系列匹配某個(gè)句法規(guī)則的字符串。 原文收錄在我的 GitHub博客 (https://github.com/jawil/blog) ,喜歡的可以關(guān)注最新動(dòng)態(tài),大家一起多交流學(xué)習(xí),共同...
閱讀 2222·2021-09-07 09:58
閱讀 3400·2019-08-30 14:07
閱讀 1310·2019-08-29 12:32
閱讀 676·2019-08-29 11:06
閱讀 3700·2019-08-26 18:18
閱讀 3739·2019-08-26 17:35
閱讀 1387·2019-08-26 11:35
閱讀 617·2019-08-26 11:35