LeetCode三道模式匹配算法题(同构字符串 一串三~)

news2024/9/28 13:19:56

模式匹配

好像回到小学语文课堂~ 🤣
老师:ABB式 大家能想出哪些呀~😊
我:绿油油~😁 金灿灿~😁

哈哈哈哈哈 好啦,来看算法题~
在这里插入图片描述


LeetCode 205 同构字符串


在这里插入图片描述

  • 哈哈哈哈 怎么判断 绿油油 和 金灿灿 是同一模式的字符串呢?😂

  • 思路 :把字符串的每一个字符都赋予一个数字(出现顺序),然后转变成可比较的模式字符串就好啦~

  • 对于给定的字符串,我们通过将每个字符替换为其第一次出现的索引来构建一个模式字符串。例如,字符串 “abb” 可以转换为模式 “122”,因为 ‘a’ 对应 1,‘b’ 对应 2。

  • 比如说 a b b——>1 2 2 ; mee——>1 2 2 ; aqq——>1 2 2

  • abcdd——>1 2 3 4 4 acbee——>1 2 3 4 4

  • 代码:哈希表 + 字符串

 // 主函数,判断两个字符串是否同构
    public boolean isIsomorphic(String s, String t) {
        // 将字符串 s 和 t 转换成它们的模式字符串
        String s1 = convertPatternStr(s);
        String s2 = convertPatternStr(t);
        // 比较两个模式字符串是否相同,如果相同则返回 true,表示 s 和 t 是同构的
        return s1.equals(s2);
    }
    
    // 辅助函数,将输入的字符串转换成模式字符串
    public static String convertPatternStr(String s) {
        // 创建一个数组来映射字符到数字
        int[] map = new int[128]; // 128 是 ASCII 码字符集的大小
        StringBuilder sb = new StringBuilder();
        int cnt = 1; // 计数器,用来分配映射的数字
        
        // 遍历字符串 s 的每个字符
        for (char c : s.toCharArray()) {
            // 如果当前字符还没有映射到数字,则进行映射
            if (map[c] == 0) {
                map[c] = cnt; // 将当前字符映射到当前的数字 cnt
                ++cnt; // 递增计数器,为下一个新字符映射准备数字
            }
            // 将映射后的数字添加到结果字符串 sb 中,以空格分隔每个数字,防止出现11 1 和1 11的情况
            sb.append(map[c]).append(" ");
        }
        
        // 返回最终的模式字符串
        return sb.toString();
    }

LeetCode 890 查找和替换模式

在这里插入图片描述

  • 同上呀,只不过是需要一个一个比较哈哈哈哈
 public List<String> findAndReplacePattern(String[] words, String pattern) {
        List<String> list = new ArrayList<>();
        String p = convertPatternStr(pattern);
        for(String word : words){
            if(word.equals(p)||convertPatternStr(word).equals(p)) list.add(word);
        }
        return list;

    }
    public static String convertPatternStr(String s){
        int[] map = new int[128];
        StringBuilder sb = new StringBuilder();
        int cnt = 1;
        for(char c: s.toCharArray()){
            if(map[c]==0){
                map[c] = cnt;
                ++cnt;
            }
            sb.append(map[c]).append(" ");
        }
        return sb.toString();
    }

LeetCode 290 单词规律

在这里插入图片描述

  • 绿油油 金灿灿 万变不离其宗

  • 核心思路还是转化成同样的模式字符串!

public boolean wordPattern(String pattern, String s) {
    // 将 pattern 转换为模式字符串
    String s1 = convertPattern(pattern);
    // 将字符串 s 转换为模式字符串
    String s2 = convertString(s);
    // 比较两个模式字符串是否相同
    return s1.equals(s2);
}

// 将 pattern 转换为模式字符串
public static String convertPattern(String pattern){
    // 使用一个数组来映射字符到它们的第一次出现位置(从1开始)
    int[] map = new int[128];
    int cnt = 1;
    StringBuilder sb = new StringBuilder();
    for(char c:pattern.toCharArray()){
        if(map[c]==0){
            map[c] = cnt;
            ++cnt;
        }
        sb.append(map[c]);
    }
    return sb.toString();
}

// 将字符串 s 转换为模式字符串
public static String convertString(String s){
    // 将字符串按空格分割成单词数组
    String[] words = s.split(" ");
    int cnt =1;
    HashMap<String,Integer> map = new HashMap<>();
    StringBuilder sb = new StringBuilder();
    for(String word : words){
        // 如果单词不在哈希表中,将其加入,并分配一个唯一的序号(从1开始)
        if(!map.containsKey(word)){
            map.put(word,cnt);
            ++cnt;
        }
        sb.append(map.get(word));
    }
    return sb.toString();
}

整理不易 一键三连呀列位~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0到1:理发店预约剪发小程序开发笔记(上)

背景 理发师可以在小程序上设置自己的可预约时间&#xff0c;价格&#xff0c;自我介绍&#xff0c;顾客可以根据理发师的日程安排选择合适的时间进行预约和支付。这样可以提高预约的效率&#xff0c;减少沟通成本&#xff0c;方便双方的安排。 功能规划 首页展示&#xff1…

UART编程框架详解

1. UART介绍 UART&#xff1a;通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter)&#xff0c;简称串口。 调试&#xff1a;移植u-boot、内核时&#xff0c;主要使用串口查看打印信息 外接各种模块 1.1 硬件知识_UART硬件介绍 UART的全称是Unive…

OrangePi Zero2 全志H616 开发初探

目录&#xff1a; 一、刷机和系统启动1、TF 卡格式化&#xff1a;2、镜像烧录&#xff1a;3、登录系统&#xff1a; 二、基于官方外设开发1、wiringPi 外设 SDK 安装&#xff1a;2、C 文件编译&#xff1a;3、基于官方外设的应用开发&#xff1a;① GPIO 输入输出&#xff1a;②…

ROS2入门到精通—— 2-11 ROS2实战:实现基于voronoi_planner的全局规划(一)!!!保姆级教程

实现基于voronoi_planner的全局规划将分为两篇博文进行讲解 本文参考该大佬代码: https://github.com/nkuwenjian/voronoi_planner.githttps://github.com/nkuwenjian/voronoi_layer.git将上面的ROS1代码移植到ROS2,移植不易,中间遇到很多坑 0 前言 针对一些狭窄区域,可能…

PostgreSQL的pg-collector工具

PostgreSQL的pg-collector工具 pg-collector 是一个用于 PostgreSQL 数据库的监控和数据收集工具。它主要用于收集 PostgreSQL 实例的性能指标、查询统计和日志信息&#xff0c;以便进行数据库性能分析和故障排查。通过收集这些数据&#xff0c;管理员可以更好地了解数据库的运…

『 Linux 』用户态与内核态的转换机制及信号检测时机

文章目录 用户态与内核态进程地址空间操作系统的本质 信号的处理时机 用户态与内核态 进程在执行代码的过程中代码必定涉及用户代码,库函数代码及操作系统内核代码; 以简单的printf()函数为例,该函数必定为先执行用户的代码即知道需要调用printf()函数,再执行库(如libc)中的代码…

InsCode GPU服务器快速使用

文章目录 1. 背景介绍2. 环境配置 1. 背景介绍 InsCode服务器地址&#xff1a;https://inscode.csdn.net/workbench?tabcomputed。 2. 环境配置 新建环境后&#xff0c;按照如下步骤快速配置&#xff0c;以便后续执行深度学习模型训练。 数据 openlane 环境依赖 Copy Mini…

切换数据失败0x1671分析

1、问题背景 切换双卡数据开关&#xff0c;无法切换成功&#xff0c;且单机必现该问题 2、问题分析 搜索Log发现相关拨号无法建立成功&#xff0c;返回0x1671&#xff0c;无法建立PDN连接。 相关拨号上层未下发相关AT命令&#xff0c;属于上层报错&#xff0c;并非网络问题&…

《系统架构设计师教程(第2版)》第12章-信息系统架构设计理论与实践-05-信息系统架构案例分析

文章目录 1. 价值驱动的体系结构——连接产品策略与体系结构1.1 价值模型1&#xff09;概述2&#xff09;价值驱动因素3&#xff09;传统方法识别价值模型的缺陷&#xff08;了解即可&#xff09; 1.2 体系结构策略&#xff08;挑战&#xff09;1&#xff09; 优先级的确定2&am…

厚积薄发,详解 IoTeX 2.0 如何推动 DePIN 赛道迈向新台阶

背 景 DePIN 是加密货币行业的一个新兴垂直领域&#xff0c;也是本轮牛市最重要的叙事之一。DePIN 通常通过发行和分配代币来激励参与者&#xff0c;用户可以通过提供资源、维护网络、参与治理等方式获得代币奖励并产生直接的经济收益&#xff0c;从而重新洗牌财富分配方…

友思特应用 | 硅片上的光影贴合:UV-LED曝光系统在晶圆边缘曝光中的高效应用

导读 晶圆边缘曝光是帮助减少晶圆涂布过程中多余的光刻胶对电子器件影响的重要步骤。友思特 ALE/1 和 ALE/3 UV-LED 高性能点光源&#xff0c;作为唯一可用于宽带晶圆边缘曝光的 i、h 和 g 线的 LED 解决方案&#xff0c;可高效实现WEE系统设计和曝光需求。 晶圆边缘曝光及处…

GRE VPN和MGRE VPN综合练习

GRE VPN和MGRE VPN综合练习 实验拓扑 实验要求 1、R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址; 2、R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方; R2与R5之间使用ppp的CHAP认证&#xff0c;R5为主认证方; R3与R5之间使用HDLC封装;…

【leetcode】两数相加【中等】(C++递归解法)

总体来说&#xff0c;链表类问题往往是蛮适合用递归的方式求解的 要写出有效的递归&#xff0c;关键是要考虑清楚&#xff1a; 0. return的条件 1. 每步递归的操作&#xff0c;以及何时调用下一步递归 2. 鲁棒性&#xff08;头&#xff0c;尾结点等特殊情况是否依旧成立&am…

Hadoop学习笔记1

hadoop节点规划 服务器集群规划&#xff0c;6台服务器&#xff1a; 一个主节点 两个从节点 三个工作节点 集群服务器用的都是centos7.9.2009的镜像 一、基础环境 1.1配置阿里云yum源 1.下载repo文件 wget http://mirrors.aliyun.com/repo/Centos-7.repo 2.备份并替换系…

Tensorflow深度学习总结

1.正态分布和高斯分布 正态分布&#xff08;Normal Distribution&#xff09;和高斯分布&#xff08;Gaussian Distribution&#xff09;实际上指的是同一个概率分布&#xff0c;在统计学和概率论中是最常见和最重要的连续概率分布之一。这两个术语可以互换使用&#xff0c;但…

【Linux】网络通信基础:应用层协议、HTTP、序列化与会话管理

文章目录 前言1. 应用层自定义协议与序列化1.1 什么是应用层&#xff1f;1.2 再谈 "协议"1.3 序列化 和 反序列化 2. HTTP 协议3. 认识 URL(统一资源定位符)4. urlencode和urldecode5. HTTP 协议请求与响应格式5.1 HTTP 请求5.2 HTTP 响应 6. HTTP 的方法6.1 GET 方法…

【BUG】已解决:AttributeError: module ‘sys‘ has no attribute ‘setdefaultencoding‘

AttributeError: module ‘sys‘ has no attribute ‘setdefaultencoding‘ 目录 AttributeError: module ‘sys‘ has no attribute ‘setdefaultencoding‘ 【常见模块错误】 【解决方案】 原因分析&#xff1a; 解决方案&#xff1a; 示例代码&#xff1a; 总结&#…

「JavaEE」Spring MVC:基本操作1

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;JavaEE &#x1f387;欢迎点赞收藏加关注哦&#xff01; 简介 Spring Web MVC 是⼀个 Web 框架&#xff0c;简称为 Spring MVC MVC 是 Model View Controller 的缩写&#xff0c;它是软件工程…

CSS(七)——CSS 列表和CSS Table(表格)

目录 CSS 列表 列表 作为列表项标记的图像 列表 - 简写属性 移除默认设置 所有的CSS列表属性 CSS 表格 表格边框 折叠边框&#xff08;border-collapse&#xff09; 表格宽度和高度 表格文字对齐 表格填充 表格颜色 CSS 列表 CSS 列表属性作用如下&#xff1a; 设…

反射型与dom型的xss的区别【源码分析】

反射型 XSS 和 DOM 型 XSS 都属于跨站脚本攻击 (XSS) 的类型&#xff0c;它们的共同点是均能通过注入恶意脚本在用户浏览器中执行&#xff0c;不同点是dom型xss不经过服务器&#xff0c;而反射型是经过服务器的。但是&#xff0c;它们在攻击方式、执行过程和防御措施上有所不同…