牛客网 字符串通配符

news2024/11/16 23:37:56

做题链接:字符串通配符__牛客网 (nowcoder.com)
要求:实现如下2个通配符(不区分大小写):

  • *   :匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和数字0到9组成,下同)
  • ? :匹配1个字符

输入:通配符表达式;一组字符串。

输出:返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false

数据范围:字符串长度:1≤s≤100 1\le s\le 100\ 1≤s≤100 

示例:

pq
pppq
false
**Z
0QZz
true
?*Bc*?
abcd
true
h*?*a
h#a
false
p*p*qp**pq*p**p***ppq
pppppppqppqqppqppppqqqppqppqpqqqppqpqpppqpppqpqqqpqqp
false

做题思路 : dp 问题   使用二维数组解决问题 

假设两个字符串分别是   ABCD        * BC * ?   ,那么我们就可以画出如下图

1. 为什么多一行为 null?    ---->  因为字符串可能为空  其实这就是一点一点匹配的过程

 2. 先填充为 null 的部分

 3. 匹配剩余地方

我们可以根据 横轴的字母来分类判断是否为 T

  •   :左边 || 上面 || 左上角
  •   :  当前位置可以匹配     且左上角为 T  就为 T 
  •   字母/数字:当前位置可以匹配,左上角 为 T 就为 T

得到下图 ,我们可以看到最后一个 为 T  那么也就代表  这两个字符串可以匹配。

 最终代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Scanner scanner = new Scanner(System.in);
        String str1 = scanner.nextLine().toLowerCase();//带通配符的字符串
        String str2 = scanner.nextLine().toLowerCase();//不带通配符的字符串
        boolean ret = isMatching(str1, str2);
        System.out.println(ret);
    }

        public static boolean isMatching(String s1, String s2) {
        boolean[][] arr = new boolean[s2.length() + 1][s1.length() + 1];
        //我们使用 0 代表 false   1 代表 true
        //1.首先把第一行和第一列搞定
        //    第一行:
        arr[0][0] = true;
        for (int i = 1; i <= s1.length(); i++) {
            char ch = s1.charAt(i - 1);
            if (ch == '*') {
                arr[0][i] = arr[0][i - 1];
            } else {
                arr[0][i] = false;
            }
        }
        //    第一列
        for (int i = 1; i <= s2.length(); i++) {
            char ch = s2.charAt(i - 1);
            if (ch == '*') {
                arr[i][0] = arr[i - 1][0];
            } else {
                arr[i][0] = false;
            }
        }

        //2.填充其他部分
        for (int i = 1; i <= s2.length(); i++) {
            for (int j = 1; j <= s1.length(); j++) {
                char ch = s1.charAt(j - 1);
                //①判断是*的情况
                if (ch == '*' && isOk(s2.charAt(i - 1))){
                    arr[i][j] = arr[i - 1][j] || arr[i][j - 1] || arr[i-1][j-1];
                }
                //②判断是 ? 的情况
                else if (ch == '?' && isOk(s2.charAt(i - 1))) {
                    arr[i][j] = arr[i - 1][j - 1];
                }
                //③不是通配符的情况
                else{
                    if (ch == s2.charAt(i - 1) && arr[i - 1][j - 1]) {
                        arr[i][j] = true;
                    } else {
                        arr[i][j] = false;
                    }
                }
            }
        }
        return arr[s2.length()][s1.length()];
    }
    public static boolean isOk(char ch) {
        return ch >= 'a' && ch <= 'z' || ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z';
    }
}

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

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

相关文章

【回看2022 展望2023】一个普通大学生的2022回忆录

目录 一、前言 二、回望2022 2022年1月 2022年2月 2022年3月 2022年4月5月6月7月8月 2022年9月 2022年10月 2022年11月 2022年12月 三、总结与期望 结语 期望 一、前言 虽然我在csdn上已经有2年的码龄了&#xff0c;但我是从2021年4月才开始写我的第一篇博客。其实从学…

Cache实现

Cache&#xff08;S,E,B,m&#xff09;&#xff1a; S&#xff1a;每个set包含一个或者多个cache line&#xff08;高速缓冲行&#xff09; cache line&#xff1a;分别包含有效位&#xff08;valid&#xff09;、标记&#xff08;tag&#xff09;、数据块&#xff08;cache b…

机器学习中的数学原理——感知机模型

这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟&#xff0c;也希望对你的学习有帮助哦&#xff01;感兴趣的小伙伴欢迎私信或者评论区留言&#xff01;这一篇就更新一下《白话机器学习中的数学——感知机》&#xff01; 目录 一、什么是感知机 二、模型分析…

HDLC、ppp、MGRE实验(1.1)

1、首先为每个路由器的每个接口配置ip r1&#xff1a; [r1]interface Serial 4/0/0 [r1-Serial4/0/0]ip address 12.1.1.1 24 [r1-Serial4/0/0]int gi 0/0/0 [r1-GigabitEthernet0/0/0]ip add 192.168.1.1 24 r2&#xff1a; [r2-Serial4/0/0]ip add 12.1.1.2 24 [r2-Seria…

二十三、shiro安全框架详解(一)

一、 权限概述 1. 什么是权限 权限管理&#xff0c;一般指根据系统设置的安全策略或者安全规则&#xff0c;用户可以访问而且只能访问自己被授权的资源&#xff0c;不多不少。权限管理几乎出现在任何系统里面&#xff0c;只要有用户和密码的系统。 权限管理在系统中一般分为…

手把手代码实现五级流水线CPU——第三篇:流水线控制逻辑

系列文章目录 第一篇&#xff1a;初级顺序流水线 第二篇&#xff1a;分支预测流水线 文章目录系列文章目录一、控制逻辑二、具体操作1.判断暂停2.控制冒险3.跳转问题4.实现代码一、控制逻辑 通过暂停和插入气泡来动态调整流水线的状态 二、具体操作 1.判断暂停 识别&#x…

MySQL高级 索引【索引使用索引设计原则】

目录 1&#xff1a;索引使用 1.1&#xff1a;验证索引效率 1.2&#xff1a;最左前缀法则 1.3&#xff1a;范围查询&#xff08;存在索引失效的情况&#xff09; 1.4&#xff1a;索引失效情况 1.4.1&#xff1a;索引列运算&#xff08;索引会失效&#xff09; 1.4.2&…

第三十五讲:无线局域网基础知识

1. IEEE 802.11协议 802.11无线标准家族包括802.11a/b/g/n/ac五个标准理论上可以提供高达每秒1Gbit的数据传输能力标准定义了如何使用免授权2.4 GHz 和 5GHz 频带的电磁波进行信号传输。 802.11无线标准家族 802.11a 802.11b 802.11g 802.11n 802.11ac 工作频段 5GHz 2…

servelt的cookie操作

Cookie对象 Cookie是浏览器提供的一种技术&#xff0c;通过服务器的程序能将一些只须保存在客户端&#xff0c;或者在客户端进行处理的数据&#xff0c;放在本地的计算机上&#xff0c;不需要通过网络传输&#xff0c;因而提高网页处理的效率&#xff0c;并且能够减少服务器的…

Allegro如果通过CNS Show命令查看走线的阻抗操作指导

Allegro如果通过CNS Show命令查看走线的阻抗操作指导 Allegro可以通过CNS show的命令快速查看走线的阻抗,省去通过规则管理器查看的时间,如下图 具体操作如下 选择Display命令选择Constraint

使用资源绑定器获取属性配置文件中的内容(读取属性配置文件最简单的方法)

package com.javase.reflect;import java.util.ResourceBundle;/*** java.util包下提供了一个资源绑定器&#xff0c;便于获取属性配置文件中的内容&#xff0c;使用这种方式的时候&#xff0c;* 属性配置文件必须放在类路径下。该文件的文件名必须是 "*.properties&…

2022年度总结|我的CSDN成长历程

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 周榜第一&#xff0c;诚信互投 我正在参加年度博客之星评选&#xff0c;麻烦…

Leetcode:150. 逆波兰表达式求值(C++)

目录 问题描述&#xff1a; 实现代码和解析&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 示例 1&#xff1a; 输入&a…

Selenium用法详解【从入门到实战】【JAVA爬虫】

目录 简介 selenium安装 java使用 浏览器控制 修改窗口大小 窗口最大化 窗口全屏显示 浏览器前进&后退 浏览器刷新 浏览器打开新标签页 浏览器窗口切换 关闭标签页 关闭浏览器 浏览器页面截图 其他操作 简介 Selenium是一个用于Web应用程序测试的工具。Seleniu…

Redis发布订阅和事务实现原理

Redis发布订阅和事务实现原理发布订阅实现频道订阅与退订频道模式订阅与退订发送消息事务事务队列执行事务WATCH命令实现ACID原子性一致性隔离性持久性发布订阅 Redis的发布订阅由PUBLISH&#xff0c;SUBSCRIBE&#xff0c;PSUBSCRIBE等命令组成,例子如下: redis中我们还可以通…

三菱FX5U系列PLC通过简单CPU通信功能实现以太网通信的具体方法示例

三菱FX5U系列PLC通过简单CPU通信功能实现以太网通信的具体方法示例 对于三菱FX5U系列PLC,只需对CPU模块进行简单的参数设置,即可实现在指定时间内与指定软元件进行数据收发的功能。以1:1的方式设置通信对象(传送源)和通信对象(传送目标),在指定的通信对象之间进行数据的…

windows下TensorFlow-GPU 的安装教程

文章目录安装环境一. 查看自己的GPU版本是否支持cuda二 .安装CUDA三. 安装cuDNN安装环境 Anaconda: 4.10.1python: 3.8.8tensorflow-gpu: 2.5.0cuda: 11.4.0cudnn: 8.2.2.26 一. 查看自己的GPU版本是否支持cuda 打开显卡的控制面板&#xff0c;查看显卡是否支持cuda 查看te…

物联网-初步探索lua

初步探索lua 在物联网行业中&#xff0c;存在各种协议&#xff1b;比如在电控和云端进行通信的时候需要对功能进行解码和编码&#xff1b;当云端下发到设备的时候需要将Json格式的命令转换成电控码&#xff1b;当电控进行上报或者返回的时候&#xff0c;需要将16进制的电控码转…

(黑马C++)L06 重载与继承

一、关系运算符重载 以重载等于号运算符为例&#xff1a; #include<string> #include <iostream> using namespace std;class Person { public:Person(string Name, int age) {this->m_Name Name;this->m_Age age;}public:string m_Name;int m_Age; };bo…

SD存储卡接口规范介绍

SD存储卡简介 SD卡高度集成闪存&#xff0c;具备串行和随机存取能力。可以通过专用优化速度的串行接口访问&#xff0c;数据传输可靠。接口允许几个卡垛叠&#xff0c;通过他们的外部连接。接口完全符合最新的消费者标准&#xff0c;叫做SD卡系统标准&#xff0c;由SD卡系统规范…