LeetCode150道面试经典题--单词规律(简单)

1.题目

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。

2.示例

pattern="abba"

s = "cat dog dog cat"

返回 true

pattern="abba"

s = "cat pig dog cat"

返回 false

pattern="ab"

s = "cat cat"

返回 false

提示

  • 1 <= pattern.length <= 300
  • pattern 只包含小写英文字母
  • 1 <= s.length <= 3000
  • s 只包含小写英文字母和 ' '
  • s 不包含 任何前导或尾随对空格
  • s 中每个单词都被 单个空格 分隔

3.思路

哈希表:

        首先看到映射相关问题就得联想到哈希表,然后先分析特殊情况,比如s为空或者s里面的字母个数和pattern的个数不匹配则直接返回false,否则正常情况下,先将s通过spilt方法进行切割后,在遍历s情况下,不存在的键值对应的映射就存入哈希表中,存在的就比较是否相等即可。

如果不了解哈希表则可以通过以下内容了解相关知识

Java类集框架(二)_Alphamilk的博客-CSDN博客

4.代码

LeetCode代码:

使用时间优先代码:

class Solution {
    public boolean wordPattern(String pattern, String s) {
//        判断两种特殊情况
        if (s.length() ==0){
            return false;
        }
        String ss[] = s.split(" ");
        if (ss.length != pattern.length()){
            return false;
        }

//        正常情况
        HashMap<Character,String> map = new HashMap<>();
        for (int i= 0;i<pattern.length();i++){
            if (!map.containsKey(pattern.charAt(i))){
                if (map.containsValue(ss[i])){
                    return false;
                }
                map.put(pattern.charAt(i),ss[i]);
            }else {
                if (!map.get(pattern.charAt(i)).equals(ss[i])){
                    return false;
                }
            }
        }
        return true;
    }
}

还有一种做法是通过构造两个哈希表实现,内存上稍微会优于该算法,但是时间上会慢一些。

案例详细代码:

package LeetCode14;

import java.util.Arrays;
import java.util.HashMap;

public class javaDemo {
    public static void main(String[] args) {
        String pattern = "abbc";
        String s = "";
        boolean flag = true;

//        判断两种特殊情况
//        当s为空
        if (s.length() ==0){
            flag = false;
        }
//        当ss中单词个数与pattern个数不匹配情况
        String ss[] = s.split(" ");
        if (ss.length != pattern.length()){
            flag = false;
        }

//        正常情况
        HashMap<Character,String> map = new HashMap<>();
//        遍历整个pattern
        for (int i= 0;i<pattern.length();i++){
//            判断是否存在键值
            if (!map.containsKey(pattern.charAt(i))){
//                判断值是否已经对应其他键值
                if (map.containsValue(ss[i])){
                    flag = false;
                    break;
                }
//              不满足前面条件的话就正常放入
                map.put(pattern.charAt(i),ss[i]);
            }else {
//                如果有存在的键,则进行比较
                if (!map.get(pattern.charAt(i)).equals(ss[i])){
                    flag = false;
                    break;
                }
            }
        }
//        输出flag
        System.out.println(flag);
    }
}

会了?试试挑战下一题!♪(^∀^●)ノシ (●´∀`)♪ 

LeetCode150道面试经典题-- 有效的字母异位词(简单)_Alphamilk的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/79074.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软考笔记——9.软件工程

软件工程的基本原理&#xff1a;用分阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制、采用现代程序设计技术、结果应能清除的审查、开发小组的人员应少而精、承认不断改进软件工程事件的必要性。 软件工程的基本要素&#xff1a;方法、工具、过程 软件生…

async和await

一&#xff0c;基本使用 其实就是之前学过的异步函数&#xff0c;异步编程在函数前写一个ansyc&#xff0c;就转化为异步函数&#xff0c;返回的是一个promise对象&#xff0c;于是就可以使用await关键字&#xff0c;可以把异步函数写成同步函数的形式&#xff0c;极大地提高代…

(搜索) 剑指 Offer 13. 机器人的运动范围 ——【Leetcode每日一题】

❓剑指 Offer 13. 机器人的运动范围 难度&#xff1a;中等 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动&#xff0c;它每次可以向左、右、上、下移动一格&#xff08;不能移动到方格外&#xff09;&…

带你了解SpringBoot支持的复杂参数--自定义对象参数-自动封装

&#x1f600;前言 本篇博文是关于SpringBoot 在响应客户端请求时支持的复杂参数和自定义对象参数&#xff0c;希望您能够喜欢&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章…

山西电力市场日前价格预测【2023-08-19】

日前价格预测 预测明日&#xff08;2023-08-19&#xff09;山西电力市场全天平均日前电价为366.41元/MWh。其中&#xff0c;最高日前电价为406.33元/MWh&#xff0c;预计出现在18: 30。最低日前电价为344.68元/MWh&#xff0c;预计出现在13: 30。 价差方向预测 1&#xff1a; 实…

【观察者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型模式。它定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 观察者模式使用三个类Subject、Observer和Client。Subject…

SpringBoot复习(39)Servlet容器的自动配置原理

Servlet容器自动配置类为ServletWebServerFactoryAutoConfiguration 可以看到通过Import注解导入了三个配置类&#xff1a; 通过这个这三个配置类可以看出&#xff0c;它们都使用了ConditionalOnClass注解&#xff0c;当类路径存在tomcat相关的类时&#xff0c;会配置一个T…

算法通关村第4关【白银】| 栈的经典算法问题

1.括号匹配问题 思路&#xff1a;将左括号压入栈中&#xff0c;遍历字符串&#xff0c;当遇到右括号就出栈&#xff0c;判断是否是匹配的一对&#xff0c;不是就返回false&#xff08;因为按照顺序所以当遇到右括号出栈一定要是匹配的&#xff09;。使用Map来简化ifelse clas…

gazebo仿真ros2两轮差速小车没有控制的情况下缓慢移动后退

最近在做一款2轮差速的机器人小车&#xff0c;在做gazebo仿真的时候&#xff0c;发现小车一直在缓慢的后退&#xff0c;一边后退一边缓慢拐弯。 环境&#xff1a;ros2 foxy gazebo-11 小车xacro模型代码 <?xml version"1.0"?> <robot name"jtb…

MySQL环境安装

文章目录 MySQL环境安装1. 卸载1.1 卸载不要的环境1.2 检查卸载系统安装包 2. 安装2.1 获取mysql官方yum源2.2 安装mysql的yum源2.3 安装mysql服务 3. 登录(1)(2)(3) 4. 配置my.cnf MySQL环境安装 说明&#xff1a; 安装与卸载中&#xff0c;用户全部切换成为root&#xff0c…

数据结构--拓扑排序

数据结构–拓扑排序 AOV⽹ A O V ⽹ \color{red}AOV⽹ AOV⽹(Activity On Vertex NetWork&#xff0c;⽤顶点表示活动的⽹)&#xff1a; ⽤ D A G 图 \color{red}DAG图 DAG图&#xff08;有向⽆环图&#xff09;表示⼀个⼯程。顶点表示活动&#xff0c;有向边 < V i , V j …

vmalert集成钉钉告警

vmalert通过在alert.rules中配置告警规则实现告警&#xff0c;告警规则语法与Prometheus兼容&#xff0c;依赖Alertmanager与prometheus-webhook-dingtalk实现钉钉告警&#xff0c;以下步骤&#xff1a; 1、构建vmalert 从源代码构建vmalert&#xff1a; git clone https://…

用Java实现原神抽卡算法

哈喽~大家好&#xff0c;好久没有更新了&#xff0c;也确实遇到了很多事&#xff0c;这篇开始恢复更新&#xff0c;喜欢的话&#xff0c;可以给个的三连&#xff0c;什么&#xff1f;你要白嫖&#xff1f;那可以给个免费的赞麻。 &#x1f947;个人主页&#xff1a;个人主页​​…

信息与通信工程面试准备——数学知识|正态分布|中心极限定理

目录 正态分布 正态分布的参数 正态分布的第一个参数是均值 正态分布的第二个参数是标准差SD 所有正态分布的共同特征 标准正态分布&#xff1a;正态分布的特例 中心极限定理 理解定义 示例# 1 示例# 2 知道样本均值总是正态分布的实际含义是什么&#xff1f; 正态分…

Kafka—工作流程、如何保证消息可靠性

什么是kafka&#xff1f; 分布式事件流平台。希望不仅仅是存储数据&#xff0c;还能够数据存储、数据分析、数据集成等功能。消息队列&#xff08;把数据从一方发给另一方&#xff09;&#xff0c;消息生产好了但是消费方不一定准备好了&#xff08;读写不一致&#xff09;&am…

集简云 x 车邻邦丨实现金蝶云星辰快速集成第三方系统,实现单据自动同步

品牌故事 车邻邦成立于2009年&#xff0c;专注于汽车贴膜及美容装饰服务&#xff0c;核心业务是为高端4S店、4S集团提供汽车精品领域“产品营销施工售后”的一站式解决方案。 公司成立至今已有14年之久&#xff0c;累计服务客户数百家、累计服务车辆百万台次&#xff0c;口碑…

java 反射内存申请/浪费问题

反射字段动态get&#xff0c;内存申请/浪费 1. get() 会自动创建封装类对象&#xff0c;导致内存浪费 2. 使用基本getInt(&#xff09;方法&#xff0c;直接返回基础类型&#xff0c;内存使用低 使用反射字段&#xff0c;get动态获取字段值&#xff0c;测试内存申请情况 pub…

【SpringCloud】Stream消息通知使用

文章目录 概述标准MQ 配置POMYML 示例消息发送配置RabbitMQ可视化插件消息消费者 遇到的问题复现解决&#xff1a;修改YML注意 概述 屏蔽底层消息中间件的差异,降低切换成本&#xff0c;统一消息的编程模型 官网&#xff1a; https://spring.io/projects/spring-cloud-stream#…

怎么把pdf压缩到5m以内?压缩办法非常多

怎么把pdf压缩到5m以内&#xff1f;PDF文件是我们办公过程中较为常用的文件格式&#xff0c;PDF文件所包含的内容通常较多&#xff0c;比如文本、图像以及音视频等等。这样的话&#xff0c;PDF文件占用内存也较大。如果需要对PDF文件进行使用、传输、分享等的话&#xff0c;可能…

vue3动态组件

1 、 可以通过 shallowRef 把 可以把组件进行包裹 <template><div><el-button click"setclick(son1)">1111</el-button><el-button click"setclick(son2)">2222</el-button><el-button click"setclick(son…