给定一种规律 pattern
和一个字符串 s
,判断 s
是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern
里的每个字母和字符串 s
中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern ="abba"
, s ="dog cat cat dog"
输出: true
示例 2:
输入:pattern ="abba"
, s ="dog cat cat fish"
输出: false
示例 3:
输入: pattern ="aaaa"
, s ="dog cat cat dog"
输出: false
解题:
思路:这个题目和之前一个同构字符串的题目解题思路有点相似。
首先我们可以看出这是一个双射的题目,可以使用哈希表来解决。然后我们可以使用字符串中的split(“ ”)方法对字符串s进行按照空格的划分;然后就可以用同构字符串题目的解题思路来解决啦(http://t.****img.cn/xbQY0 在这篇博客中我详细讲述了映射和哈希表的知识以及同构符串的解题思路)在这里我们需要注意:判断字符串是否相等要使用qeuals, 判断字符2是否相等使用==
String [] arr=s.split(" "); //进行划分
HashMap<Character,String> p2a=new HashMap<>();
HashMap<String,Character> a2t=new HashMap<>();
if(pattern.length() !=arr.length) //若长度不相等直接返回false
return false;
for(int i=0;i<pattern.length();i++)
{
char pp =patter.charAt(i); //分别获取字符和字符串
String ss=arr[i];
if((p2a.containsKey(pp) && !(p2a.get(pp).equals(ss))) || (a2p.containsKey(ss) && (a2p.get(ss)!= pp)))
return false;
p2a.put(pp,ss);
a2p.put(ss,pp);
}
return true;