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

本文解析了一种编程问题,如何使用Python实现判断字符串str是否遵循给定的pattern规律。通过ArrayList存储单词,HashMap映射字符,逐个字符对比并避免重复配对。适用于学习字符串处理和哈希数据结构的应用。
摘要由CSDN通过智能技术生成

题目描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值