这道题考察的是字符匹配,我用java很久没做出来,想来还是对java的使用不够了解。
以下是算法解析:
public boolean wordPattern(String pattern, String str) {
// split 是java自带的切分字符串的函数,非常好用
String[] words = str.split(" ");
if (words.length != pattern.length())
return false;
// 不需要指定存入的类型
Map index = new HashMap();
for (Integer i=0; i<words.length; ++i)
if (index.put(pattern.charAt(i), i) != index.put(words[i], i))
// 最关键的就是这个判断语句了,之前我总是想用,两个参数其中一个做键,另一个做为值,来判断,但是这样是无法达成双向判断的。
// put函数返回null如果之前没有,如果有,则返回当前
return false;
return true;
}
这个方法中,我其实是偏向于用两个map来存储的,问题是?
map中的key,可以是不同的类型吗?
还有一种不同hashmap的做法:
遍历每两个位置,判断其关系
public boolean wordPattern(String pattern, String str) {
if(pattern.length()!=str.split(" ").length) return false;
for(int i=0; i<pattern.length(); i++){
for(int j=i+1; j<pattern.length(); j++){
if(pattern.charAt(j)==pattern.charAt(i)){
if(!str.split(" ")[j].equals(str.split(" ")[i])) return false;
}else if(str.split(" ")[j].equals(str.split(" ")[i])) return false;
}
}
return true;
}