2020-12-16 LeetCode每日一题wordPattern的HashMap+ArrayList解法

目录

  • 题目描述
  • 解题思路
  • 解题代码

题目描述

给定一种规律 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博客和题解 用于学习交流,不足之处多多包涵!

你可能感兴趣的:(LeetCode,java,leetcode,字符串)