LeetCode 面试16.18 模式匹配

2023-11-20

你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a","go"是"b"),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。

本题采用枚举的方法,枚举“a”对应的子串长度,找到a和b对应的子串,判断能否匹配。

class Solution:
    def patternMatching(self, pattern: str, value: str) -> bool:
        count_a = sum(1 for ch in pattern if ch == 'a')
        count_b = len(pattern) - count_a
        if count_a < count_b:
            count_a, count_b = count_b, count_a
            pattern = ''.join('a' if ch == 'b' else 'b' for ch in pattern)

        if not value:
            return count_b == 0
        if not pattern:
            return False

        for len_a in range(len(value) // count_a + 1):
            rest = len(value) - count_a * len_a
            if (count_b == 0 and rest == 0) or (count_b != 0 and rest % count_b == 0):
                len_b = 0 if count_b == 0 else rest // count_b
                pos, correct = 0, True
                value_a, value_b = None, None  # 当前长度情况下a和b对应的字符串的值,之后截取的子串会和该串进行比较。
                for ch in pattern:
                    if ch == 'a':
                        sub = value[pos:pos + len_a]
                        if not value_a:
                            value_a = sub
                        elif value_a != sub:
                            correct = False
                            break
                        pos += len_a
                    else:
                        sub = value[pos:pos + len_b]
                        if not value_b:
                            value_b = sub
                        elif value_b != sub:
                            correct = False
                            break
                        pos += len_b
                if correct and value_a != value_b:
                    return True
        return False

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode 面试16.18 模式匹配 的相关文章

  • java String(一)—— Java中的String类型

    一 需要理解的代码 import java lang reflect Array import java util ArrayList import java util Arrays import java util HashMap imp
  • 8.翻转子串

    题目描述 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串 请将这个算法编写成一个函数 给定两个字符串s1和s2 请编写代码检查s2是否为s1旋转而成 要求只能调用一次检查子串的函数 给定两个字符串s1 s2 请返回bool
  • 每日一练(三十七)

    文章目录 3 1 求字符串的子串个数 3 2 判断程序输出 3 3 strlen 实现 3 4 strcmp 实现 3 5 strcat 实现 每日一练合集 3 1 求字符串的子串个数 3 2 判断程序输出 3 3 strlen 实现 in
  • Java数字字符串的判断与转换

    文章目录 引言 一 判断字符串是否为数字 1 1 第三方包StringUtils isNumeric 1 2 Java自带方法Character isDigit 1 3 正则表达式 二 将字符串转化为数字 2 1 整数 2 2 小数 参考
  • 大数(四则运算)

    四则运算 大数加法 高精度加法 大数减法 大数乘法 大数乘法 幂运算 大数乘法 高精度幂运算 大数除法 大数加法 思路 从后往前算 即由低位向高位运算 计算的结果依次添加到结果中去 最后将结果字符串反转 输入的时候两个数都是以字符串的形式输
  • Java Scanner nextInt()方法与示例

    扫描器类的nextInt 方法 Scanner Class nextInt method Syntax 句法 public int nextInt public int nextInt int rad nextInt method is a
  • 在事情没有变得糟糕之前_这是我们没有的问题的糟糕解决方案

    在事情没有变得糟糕之前 最糟糕的代码是什么 不要说JavaScript 它会在你身上成长 不 也不是Perl 好的 所以Perl非常令人讨厌 最糟糕的代码 这是我们不需要的代码 紧接着是几乎有效的代码 然后是无效的代码 几乎可以正常工作的代
  • String类常用方法系列八:替换

    1 String replace target value 替换指定字符 Test public void test1 String str 好好学习 天天向上 我爱学习 str str replace 好好学习 System out pr
  • LeetCode刷题之路:14.最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 1 输入 flower flow flight 输出 fl 示例 2 输入 dog racecar car 输出 解释 输入不存在公共前缀 说明 所有输入
  • KMP算法是怎么被设计出来的

    定义 我们假设要在主串中寻找子串出现的所有位置 我们记主串中的开始位置为匹配位置 如在 abc 中匹配 bc 则匹配位置为 2 暴力 我们把匹配过程拆解为 枚举匹配位置 验证主串从匹配位置开始是否一一匹配子串 以此 有显然的 O n m
  • C/C++2019秋招面试题集合01

    C C 2019秋招面试题集合01 8 19 腾讯 提前批 客户端开发 1 给定一个字符串数组 和一个子串 求字符串中是否存在子串 如果存在则返回首个匹配到的索引位置 否则 返回 1 不能调用库函数 例如 字符串数组 Integrity P
  • Leetcode刷题316. 去除重复字母

    给你一个字符串 s 请你去除字符串中重复的字母 使得每个字母只出现一次 需保证 返回结果的字典序最小 要求不能打乱其他字符的相对位置 注意 该题与 1081 https leetcode cn com problems smallest s
  • Shell if 条件判断

    Shell 语言中的if条件 一 if的基本语法 if command then 符合该条件执行的语句 elif command then 符合该条件执行的语句 else 符合该条件执行的语句 fi 二 文件 文件夹 目录 判断 b FIL
  • Date类型与字符串的相互转换

    Date时间类型与字符串的相互转换 Test public void date throws ParseException 一 Date时间类型转字符串 1 获取当前时间 Date date new Date 2 设定时间格式 下面两行可以
  • PTA天梯赛L1-058 6翻了(c语言实现)

    原题链接 这道题稍微有一点点灵活 乍一想还是有点想不到的 主要还是对6的个数进行计数 如果是6则计数有多少个6 如果不是6的话则要进行判断 如果在此之前6的个数超过了3 gt 3 但是小于等于9那么要输出9 如果在此之前6的个数超过了9 g
  • Python基础数据类型之字符串(一)

    Python基础数据类型之字符串 一 一 字符串格式化 1 字符串占位符 2 字符串格式化操作 二 f string格式化 三 字符串的索引 四 字符串的切片 1 常规切片使用方法 3 步长的介绍 2 切片使用方法二 一 字符串格式化 1
  • c++工程模式+配置文件+动态调用类

    前言 主函数 SimpleFactoryRefactor cpp include
  • 经典算法题:大数乘法之乘法累加算法 Karatsuba算法(远远超出long long范围)

    问题 超过100位数字的整数的乘法 无法直接调用 运算 例如 求 1234567891011121314151617181920 2019181716151413121110987654321 的乘积结果 需要转化成数组问题或者字符串问题求
  • qt 开发遇到的坑

    1 QString的toString 和toWString 引起的win32位release 下std string的析构崩溃 代码 QString qs std string str qs toStdString const wchar
  • Unicode编码小结

    Unicode编码 一 ASCLL码 ASCII American Standard Code for Information Interchange 美国信息交换标准代码 是基于拉丁字母的一套电脑编码系统 主要用于显示现代英语和其他西欧语

随机推荐

  • mybatis实现代码自动生成

    1 在pom文件中加入代码自动生成插件
  • 光圈,焦距,工作距离与景深之间的关系。

    光圈 光圈越大 景深越小 光圈越小 景深越大 焦距 焦距越长 景深越小 焦距越短 景深越短 工作距离 工作距离越小 景深越小 工作距离越大 景深越大
  • linux和shell的关系

    shell的理解 shell翻译成壳的意思 它是包裹在linux内核外层的 一个可通过一系列的linux命令对操作系统发出相关指令的人机界面 shell可以通过其条件语句和循环语句等 把一系列linux命令结合在一起 形成一个相当于面向过程
  • Java——面向对象练习(图书管理系统的实现)

    文章目录 Java 面向对象练习 图书管理系统的实现 一 实现效果展示 1 功能简介 2 登陆界面 3 菜单界面 4 功能展示 二 具体代码实现 1 类的设计 1 创建图书相关的类 2 创建操作相关的类 1 接口的实现 2 新增书籍 3 删
  • 谷歌(Chrome)浏览器自定义插件

    准备 1 js文件 需要的功能逻辑 2 插件主入口及配置 manifest json 3 插件图标 目录结构 添加插件流程 选择插件文件夹 代码 manifest json name 百度 manifest version 2 versio
  • C语言基础-----(8)控制语句

    6 控制语句 6 1 顺序语句 c语言从主函数当中的第一条语句开始执行 6 2 选择语句 6 2 1单分支 if 表达式 语句块1 else 语句块2 step 判断表达表达式 如果表达式为真 则执行语句块1 如果表达式为假 则执行语句块2
  • mysql一键更改图片地址_利用mysql语句批量替换指定wordpress文章图片路径

    有时候当你看到一篇十分优秀的国外文章的时候 比如说十个优秀 五十个优秀的网站设计欣赏 wordpress主题下载 jquery插件下载等等 这些文章当中往往会跟随大量的示例图片供读者查看 如果这些文章很有收藏价值 你可能会直接进行翻译或转载
  • 机器学习---监督学习、无监督学习

    机器学习 什么是机器学习 两种主要类型是 监督学习和无监督学习 强化学习 监督学习 什么是监督学习 回归问题 预测连续值输出 eg 预测房价 分类问题 预测离散值输出 eg 预测肿瘤 监督学习 给算法一个数据集 其中包含了正确答案 输入x
  • Android项目中三种依赖的添加方式

    添加本地依赖 首先将所需的 jar 或者 aar 包放在libs文件夹下 方式1 右击jar包 选择Add As Library 最后sync 方式2 在app build gradle中添加本地依赖的声明 implementation f
  • MCU 常用的文件系统

    片外FLASH SPIFFS FATFS LittleFs 片上FLASH FlashDB EasyFlash
  • python3爬虫伪装代理IP

    在爬取类似 起点 色魔张大妈 这样的网站时 会被网站看出是爬虫机制 这时需要伪装成浏览器以及使用IP代理的方式来爬去正常内容 实例 import re import requests import urllib request from l
  • shopify上传主题

    shopify theme 多语言国际化开发 shopify theme 跨境电商开发 liquid 本地编辑shopify主题的方式一 shopify cli 的命令
  • 从《模仿游戏》认识图灵

    模仿游戏 剧情简介 模仿游戏这部电影主要讲述了在二战期间 英国为了破解德军的加密系统Enigma密码机招募了一批有才华的破译者来执行此项国家最高机密任务 艾伦 图灵就是其中之一 然而图灵孤僻的性格让他与别的同事不能融洽相处 图灵一意孤行要建
  • 计算机怎么解除c盘用户权限,电脑c盘文件夹拒绝访问怎么办 删除c盘文件如何获得管理员权限...

    c盘是我们系统文件存储的关键位置 当我们想要查看c盘的时候 出现拒绝访问的情况怎么解决呢 其实很简单 下面小编为大家带来打开c盘文件夹拒绝访问的详细解决方法 大家可以直接按照下面的步骤即可解决 电脑c盘文件夹拒绝访问怎么办 1 通常情况下
  • JVM监控工具和方法

    在JVM运行的过程中 为保证其稳定 高效 或在出现GC问题时分析问题原因 我们需要对GC进行监控 所谓监控 其实就是分析清楚当前GC的情况 其目的是鉴别JVM是否在高效的进行垃圾回收 以及有没有必要进行调优 通过监控GC 我们可以搞清楚很多
  • 代码点(code point)和代码单元(code units)

    1 解释一 char Java中 char类型为16个二进制位 原本用于表示一个字符 但后来发现 16位已经不够表示所有的字符 所以后来发展出了代码点表示字符的方法 代码点 code point 是指编码字符集中 字符所对应的数字 有效范围
  • 题目94:时间函数,一个猜数游戏,判断一个人反应快慢。

    import time import random play input 请问你想玩1 100猜字游戏吗 yes no n while play yes number random randint 1 100 guess int input
  • 148.排序链表(java)

    148 排序链表 题目描述 在 O n log n 时间复杂度和常数级空间复杂度下 对链表进行排序 示例 1 输入 4 gt 2 gt 1 gt 3 输出 1 gt 2 gt 3 gt 4 示例 2 输入 1 gt 5 gt 3 gt 4
  • oracle数据库 data not found的问题

    工作中写pkg的时候 遇到了这个问题 原因是在 select into的时候 可能会出现查出来是空值的情况 这个时候就会报错 解决方法是用count 先判断有没有数据 再根据有没有数据来决定要不要进行查询并赋值
  • LeetCode 面试16.18 模式匹配

    你有两个字符串 即pattern和value pattern字符串由字母 a 和 b 组成 用于描述字符串中的模式 例如 字符串 catcatgocatgo 匹配模式 aabab 其中 cat 是 a go 是 b 该字符串也匹配像 a a