290. Word Pattern
一、题目
1、审题
2、分析
给出两个字符串,判断两个字符串的元素排列规则是不是一样。
二、解答
1、思路
方法一、
采用 Map<Character, String>
将 pattern 的字符作为 Key,str 切分成单词数组 arr,单词作为 Value。
若 pattern中字符数与 str 单词数不相等,则返回 false;
若相等,在依次在 Map 中进行判断。
public boolean wordPattern(String pattern, String str) { String[] arr = str.split(" "); if(arr.length != pattern.length()) return false; HashMap<Character, String> map = new HashMap<>(); for (int i = 0; i < arr.length; i++) { char c = pattern.charAt(i); if(map.containsKey(c)) { if(!map.get(c).equals(arr[i])) return false; } else { if(map.containsValue(arr[i])) return false; map.put(c, arr[i]); } } return true; }
方法二、
采用 Map<Object, Integer>
若 pattern 与 str 排列规则一样,则下标一样时, pattern 中的字符作为 key 下标作为 value, 与 str 中单词作为 key 下标作为 value 放入 Map 时,结果应当是一样的。
若结果不一致,说明排列规则不一样。
public boolean wordPattern2(String pattern, String str) { String[] words = str.split(" "); if(words.length != pattern.length()) return false; HashMap<Object, Integer> map = new HashMap<>(); for(Integer i = 0; i < words.length; i++) if(map.put(pattern.charAt(i), i) != map.put(words[i], i)) return false; return true; }