一、题目分析
其实我最先想的是遍历两个字符串,一个记录单个字符出现的个数,一个记录通过空格分开的每个单词出现的个数
然后两个数目一一对应,看是否相等
虽然是可行的,但是在网上看到更方便的一种做法,就是单个字符作为hashMap的key值,然后单词作为value值
所以,就变成了了判断是否一一对应的关系
遍历pattern的字符,如果存在于map中,要判断value值是否equals当前的str中对应的单词
如果字符不存在于map中,在加入map前要先判断当前单词作为value值是否存在于map中(这点十分重要)
二、代码实现(java)
public class Solution {
public boolean wordPattern(String pattern, String str) {
char[] patterns = pattern.toCharArray();
Map<Character,String> maps = new HashMap<>();
String[] strs = str.split(" ");
//长度一定是相等的
if(patterns.length != strs.length)
return false;
for(int i = 0;i<patterns.length;i++){
char ch = patterns[i];
if(maps.containsKey(ch)){
String value = maps.get(ch);
if(!value.equals(strs[i]))
return false;
}else{
if(maps.containsValue(strs[i]))
return false;
maps.put(ch,strs[i]);
}
}
return true;
}
}