解法一
建立两张映射表分别为表示word与pattern间字母的双射关系。
遍历单词的各个字母,如果符合映射表就继续,如果没有建立映射关系就根据当前值建立双射关系,如果不符合已有的双射关系说明该单词和模式串是不匹配的。
import java.util.Arrays;import java.util.LinkedList;import java.util.List;class Solution {public List<String> findAndReplacePattern(String[] words, String pattern) {List<String> ansList = new LinkedList<>();// word->patternchar[] tableX = new char[26];// pattern->wordchar[] tableY = new char[26];int i;char ch1, ch2;for (String word : words) {boolean flag = true;for (i = 0; i < word.length(); ++i) {ch1 = word.charAt(i);ch2 = pattern.charAt(i);if ((tableX[ch1 - 97] == ch2) && (tableY[ch2 - 97] == ch1)) {continue;}if ((tableX[ch1 - 97] == '\0') && (tableY[ch2 - 97] == '\0')) {tableX[ch1 - 97] = ch2;tableY[ch2 - 97] = ch1;continue;}if ((tableX[ch1 - 97] != ch2) || (tableY[ch2 - 97] != ch1)) {flag = false;break;}}if (flag) {ansList.add(word);}Arrays.fill(tableX, '\0');Arrays.fill(tableY, '\0');}return ansList;}}
