问题描述
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 desired word.
(Recall that a permutation of letters is a bijection from letters to letters: every letter maps to another letter, and no two letters map to the same letter.)
Return a list of the words in words that match the given pattern.
You may return the answer in any order.
理解
输入为一个String数组和一个pattern,要求输出所有和pattern格式一致的String,例如 pattern = “aba” 那么符合要求的String为"mem", “qwq” 之类的。
代码
class Solution {
public boolean stringMatch(String word, String pattern){
char[] wordArray = word.toCharArray();
char[] patternArray = pattern.toCharArray();
Map<Character, Character> wordMap = new HashMap<Character, Character>();
for(int i = 0;i < wordArray.length;i++){
//String 和 pattern一一对应
if(!wordMap.keySet().contains(patternArray[i])){
//因为map中只有key不能重复但是 key中存的值可以重复 所以加了一个判断 key中值不重复
for(char key:wordMap.keySet()){
if(wordMap.get(key) == wordArray[i])
return false;
}
wordMap.put(patternArray[i], wordArray[i]);
}
else{
if(wordMap.get(patternArray[i]) != wordArray[i]){
return false;
}
}
}
return true;
}
public List<String> findAndReplacePattern(String[] words, String pattern) {
List<String> answerList = new ArrayList<String>();
for(String word:words){
if(stringMatch(word, pattern))
answerList.add(word);
}
return answerList;
}
}
反思一下。
虽然想了很久,但是现在感觉看到什么题都能想到map了。之前写完没加后面判断key里面存的值重复…不知道在想什么。
答案双map那个看着好爽
ps:纯记事blog 不喜勿喷