题目描述
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
解题思路
先用利用ArrayList存放s中每个被空格隔开的字符串,再用HashMap存放pattern中的每个字符,再利用HashMap的方法进行判断
利用string将s中被空格隔开的字符串存入ArrayList,存入后,如果pattern的length不等于ArrayList的size,即“aa”“b b b”类型,直接返回false。
进入循环,让key等于pattern的每个字符,value是ArrayList.get(i),如果hashmap中key没有对应的值,分两种情况:
1.hashmap中已经存在value,即“ab” “dog dog”的情况,直接返回false
2.hashmap不存在value,将key和value存入hashmap,再continue。
如果hashmap中key有对应的值,则判断该值与当前的value是否相等,若不等,则直接返回false。
解题代码
class Solution{
public boolean wordPattern(String pattern,String s){
ArrayList<String> arrayList = new ArrayList<String>();
HashMap<Character,String> hashMap=new HashMap<Character, String>();
String string="";
for(int i=0;i<s.length();i++){
if(s.charAt(i)!=' ') {
string += s.charAt(i);
}
if(i<s.length()-1) {
if (s.charAt(i + 1) == ' ') {
arrayList.add(string);
string = "";
}
}else {
arrayList.add(string);
}
}
if(pattern.length()!=arrayList.size()){
return false;
}
for(int i=0;i<pattern.length();i++){
char key=pattern.charAt(i);
if(hashMap.get(key)==null){
if(hashMap.containsValue(arrayList.get(i))){
return false;
}else{
hashMap.put(key,arrayList.get(i));
continue;
}
}
if(!hashMap.get(key).equals(arrayList.get(i))){
return false;
}
}
return true;
}
}
第一次写csdn博客和题解 用于学习交流,不足之处多多包涵!