一、题目
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = “abba”, str = “dog cat cat dog”
输出: true
示例 2:
输入:pattern = “abba”, str = “dog cat cat fish”
输出: false
示例 3:
输入: pattern = “aaaa”, str = “dog cat cat dog”
输出: false
示例 4:
输入: pattern = “abba”, str = “dog dog dog dog”
输出: false
说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-pattern
二、java题解
class Solution {
public static boolean wordPattern(String pattern, String s) {
HashMap<Character, String> hashmap = new HashMap<Character, String>();
String[] str = s.trim().split(" ");
char[] arr= pattern.trim().toCharArray();
Character key = null;
if(str.length!=arr.length)
return false;
for(int i=0;i<str.length;i++) {
if(hashmap.containsKey(arr[i])) {
if(!hashmap.get(arr[i]).equals(str[i]) ) {
return false;
}
}
else if(hashmap.containsValue(str[i])) {
for(Character getKey: hashmap.keySet()){
if(hashmap.get(getKey).equals(str[i])){
key = getKey;
}
}
if(!key.equals(arr[i])) {
return false;
}
} else hashmap.put(arr[i], str[i]);
}
return true;
}
}
思路:pattern 字符数量应该和str字符串数量相等,否则肯定不会满足规律。这里要求一一对应的关系,第一时间想到哈希表,但是哈希表一个key对应一个value,一个value可以对应多个key,所以我们可以添加一个方法使得一个value只能有一个key与之对应否则返回false。每次添加进去的时候判断表中是否存在对应的key,如果存在则判断key对应的value是否等于str[i],如果不等于则返回false。再判断表中是否存在value等于str[i],如果存在则判断该value的值是否与key相等,如果不相等返回false。