力扣290-单词规律(Java详细题解)

力扣290-单词规律

一、原题题目(简单)

1.1 题目

​ 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。

1.2 示例

  • 示例1:
    输入: pattern = “abba”, str = “dog cat cat dog”
    输出: true
  • 示例2:
    输入: pattern = “abba”, str = “dog cat cat fish”
    输出: false
  • 示例3:
    输入: pattern = “aaaa”, str = “dog cat cat dog”
    输出: false
  • 示例4:
    输入: pattern = “abba”, str = “dog dog dog dog”
    输出: false
  • 说明: 你可以假设 pattern 只包含小写字母,str 包含了由单个空格分隔的小写字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-pattern

二、解题思路

2.1 题目意思理解

​ 这个题目是个很简单的题目,很容易想到思路。

  • 首先用 split 函数将字符串 str 按空格切割成字符串数组 arraystr []。
  • 比较 pattern 与 arraystr 的长度,如果不相同直接返回 false ,否则进入下面的比较过程。
  • 建立一个 HashMap,键用来存储 pattern 中的字母,值用来存储 arraystr 数组中对应位置的单词,当然在存储的过程中会进行检验的,当键值对都没存在过时则加入 HashMap ,当有一个(键或值)存在时,取出该键值对与当前准备插入的比较,若完全相同则符合,直接下一个,若有一个(键或值)不相同时,则直接返回 false 。
  • 如果程序跑到了最后还没返回 false 则返回 true 。

2.2 详细代码(Java)

public class Solution {
    public boolean wordPattern(String pattern, String s) {
        String[] arraystr = s.split(" ");                     // 分割字符串
        if (arraystr.length != pattern.length())    return false;   // 长度不同,直接返回false
        HashMap<Character,String> map = new HashMap<>();
        for (int i = 0;i<pattern.length();i++){
            if (!map.containsKey(pattern.charAt(i))){               // 当前键在map中没存在过
                if (!map.containsValue(arraystr[i]))                // 当前值在map中也没存在过
                    map.put(pattern.charAt(i),arraystr[i]);         // 都没存在则加入map
                else return false;                                  // 健不存在但值存在,返回false
            }
            else {                                                  // 键存在
                if (map.get(pattern.charAt(i)).equals(arraystr[i]));// 值也存在,并且就是对应的键值对,什么也不做跳过
                else return false;                                  // 所存的键值对与当前不一样,返回false
            }
        }
        return true;                                                // 遍历结束,没有中途返回false的说明符合规律
    }
}
  • 代码第13行进行字符串内容的比较的时候一定要用.equals函数来比较,不能用==!=,否则都会出错。

2.3 算法执行结果

算法执行结果

三、总结分析

​ 题目很简单,单纯的哈希表的练习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ItDaChuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值