Java题目训练——统计每个月兔子的总数和字符串通配符

目录 

一、统计每个月兔子的总数

二、字符串通配符


一、统计每个月兔子的总数

  题目描述:

有一种兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子。 例子:假设一只兔子第3个月出生,那么它第5个月开始会每个月生一只兔子。 一月的时候有一只兔子,假如兔子都不死,问第n个月的兔子总数为多少?

数据范围:1<=n<=31

输入描述:

输入一个int型整数表示第n个月

输出描述:

输出对应的兔子总数

示例

输入:3

输出:2

题目解析:

       找规律,就是一个斐波那契数列,这里采用递归的方式,如果是第1个数或者第2个数,返回1;否则返回这个位置的前两个数之和。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        System.out.println(num(n));

    }

    public static int num(int n){
        if(n == 1 || n == 2){
            return 1;
        }
        return num(n - 1) + num(n - 2);
    }
}

二、字符串通配符

题目描述:

问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。 要求:

实现如下2个通配符:

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

?:匹配1个字符 注意:匹配时不区分大小写。

输入:

通配符表达式;

一组字符串。

输出:

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

数据范围:字符串长度:1<=s<=100

进阶:时间复杂度:O(n^{2}) ,空间复杂度:O(n) 

输入描述:

先输入一个带有通配符的字符串,再输入一个需要匹配的字符串

输出描述:

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

示例

示例1

输入:te?t*.*

           txt12.xls

输出:false

示例2

输入:z

           zz

输出:false

示例3

输入:pq

           ppqq

输出:false

示例4

输入:**Z

           0QZz

输出:true

示例5

输入:?*Bc*?

           abcd

输出:true

示例6

输入:h*?*a

           h#a

输出:false

说明:根据题目描述可知能被*和?匹配的字符仅由英文字母和数字0到9组成,所以?不能匹配#,故输出false

示例7

输入:p*p*qp**pq*p**p***ppq

           pppppppqppqqppqppppqqqppqppqpqqqppqpqpppqpppqpqqqpqqp

输出:false

题目解析: 

        本题采用动态规划的思想,一共有三种情况,一种是匹配"*",一种是匹配"?",一种是自身对应匹配,其中匹配"?"和自身对应可以归为一种情况。

        将两个字符串s1(有通配符),s2全都转化为小写,并且创立一个boolean状态数组arr[s1.length()+ 1][s2.length()+ 1],+1是为了设立初始态,并且使下标对应。

        初始态为arr[0][0] = true,s1为"**...",s2为空的话,字符串此位置为"*"并且上一个状态为true时,此时状态为true;s1如果为空的话,直接默认为false。

        首先看匹配"*"的情况,如果s1此时的字符是*,并且s2此时的字符合法,那么有三种状态,第一种是如果*匹配s2的上一个状态,那么这时的状态也是true;第二种是如果不匹配*也true(即s1的上一个状态匹配这时的状态),那么true;第三种是如果*匹配当前字符,状态为true。只要这三种可能有一种为true,就记此时的状态为true。

        其次就是匹配"?"和自身对应的两种情况,只要上一个状态为true,并且这两种情况成立一种就可以记为true。

        最后输出arr[s1.length()][s2.length()]的状态即可。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s1 = scanner.nextLine();
        String s2 = scanner.nextLine();

        //全部转成小写
        s1 = s1.toLowerCase();
        s2 = s2.toLowerCase();

        int n1 = s1.length();
        int n2 = s2.length();

        //建立状态存储数组
        boolean[][] arr = new boolean[n1 + 1][n2 + 1];

        //两个字符串都为空,初始化为0
        arr[0][0] = true;

        //s1为***...
        //s2为空
        //初始化
        for(int i = 1; i < n1 + 1; i++){
            arr[i][0] = s1.charAt(i - 1) == '*' && arr[i - 1][0];
        }

        //动态规划
        for(int i = 1; i < n1 + 1; i++){
            for (int j = 1; j < n2 + 1; j++) {
                char ch1 = s1.charAt(i - 1);
                char ch2 = s2.charAt(j - 1);
                //为'*'的情况
                if(ch1 == '*' && isTrue(ch2)){
                    //arr[i][j - 1] '*'匹配j - 1成功,所以匹配j也成功
                    //arr[i - 1][j] '*'匹配0次
                    //arr[i - 1][j - 1] '*'匹配当前字符
                    arr[i][j] = arr[i][j - 1] || arr[i - 1][j - 1] || arr[i - 1][j];
                }else {
                    //为'?'的情况
                    //字符自身匹配相等的情况
                    //注意括号范围
                    arr[i][j] = arr[i - 1][j - 1] && (ch1 == ch2 ||(ch1 == '?' && isTrue(ch2)));
                }
            }
        }
        System.out.println(arr[n1][n2]);
    }

    //字符是否符合范围
    public static boolean isTrue(char ch){
        if((ch >='0' && ch <='9')|| (ch >= 'a' && ch <= 'z')){
            return true;
        }
        return false;
    }
}

如有建议或想法,欢迎一起讨论学习~

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

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

相关文章

天气Weather

前言 加油 原文 天气常用会话 ❶ It looks as though it might clear up. 看起来天好像要转晴。 ❷ The forecast is not accurate. 预报不准确。 ❸ The weatherman says we’ll have a cold spell before the end of this week. 天气预报员说,在这个周末之前会有一股寒…

【数据结构与算法分析】0基础带你学数据结构与算法分析12--红黑树

红黑树 (red-black tree) 是一种自平衡二叉树&#xff0c;于 1972 年由 Rudolf Bayer 发明&#xff0c;发明时被称为 对称二叉 B 树&#xff0c;现代名称红黑树来自 Knuth 的博士生 Robert Sedgewick 于 1978 年发表的论文。红黑树的结构复杂&#xff0c;但操作有着良好的最坏情…

新的勒索软件是迄今为止最快的加密器

在一家美国公司遭到网络攻击后&#xff0c;恶意软件研究人员发现了一种似乎具有“技术独特功能”的新型勒索软件&#xff0c;他们将其命名为 Rorschach。 观察到的功能之一是加密速度&#xff0c;根据研究人员的测试&#xff0c;这将使 Rorschach 成为当今最快的勒索软件威胁。…

对Mysql的了解-索引

什么是索引? 索引是一种用于快速查询和检索数据的数据结构。常见的索引结构有: B 树&#xff0c; B树和 Hash。 索引的作用就相当于目录的作用。打个比方: 我们在查字典的时候&#xff0c;如果没有目录&#xff0c;那我们就只能一页一页的去找我们需要查的那个字&#xff0c…

结合基于规则和机器学习的方法构建强大的混合系统

经过这些年的发展&#xff0c;我们都确信ML即使不能表现得更好&#xff0c;至少也可以在几乎所有地方与前ML时代的解决方案相匹配。比如说一些规则约束&#xff0c;我们都会想到能否把它们替换为基于树的ml模型。但是世界并不总是黑白分明的&#xff0c;虽然机器学习在解决问题…

nacos本地启动单节点

1.官网下载 Releases alibaba/nacos GitHub 解压文件 unzip nacos-server-2.2.1.zip cd /Users/xiaosa/dev_tools/nacos/bin sh startup.sh -m standalone 启动不成功&#xff0c;报错入如下 原因是下面的配置为空。位置在nacos/config目录下的application.properties文件…

【英语】大学英语CET考试,导学规划与听力题答题技巧笔记(1-2)

文章目录1、课程规划和导学1.1 试卷结构和备考目标1.2 单词&#xff0c;听力&#xff0c;阅读&#xff0c;真题学习方法2、听力技巧课1&#xff08;导学与发音&#xff09;3、听力技巧课2&#xff08;答题技巧&#xff01;重要&#xff01;&#xff09;1、课程规划和导学 主讲…

C语言中宏和函数的9个区别,你都了解吗?

C语言中的宏和函数是非常相似的&#xff0c;它们都可以完成类似的功能。比如&#xff0c;想要求2个数的较大值&#xff0c;使用宏的写法是&#xff1a; // 宏的定义 #define MAX(x, y) ((x)>(y)?(x):(y))// 使用 int m MAX(10, 20);使用函数的写法是&#xff1a; // 函数…

[Golang从零到壹] 1.环境搭建和第三方包管理

文章目录安装go环境go.mod第一种情况&#xff0c;选择GOPATH第二种情况&#xff0c;不选择GOPATH(推荐)GO111MODULEgo module可执行文件位置安装go环境 go在安装时选择好安装目录完成安装之后&#xff0c;还需要设置两个环境变量&#xff1a;GOROOT、GOPATH GOROOT即go的安装…

UnQLite入门

本文介绍UnQLite的基本使用&#xff0c;包括增删改查&#xff0c;事务ACID 文章目录UnQLite介绍UnQLite常用接口函数返回码DemoKey/Value存储数据库游标UnQLite介绍 UnQLite简介 UnQLite是&#xff0c;由 Symisc Systems公司出品的一个嵌入式C语言软件库&#xff0c;它实现了一…

Scrapy-核心架构

在之前的文章中&#xff0c;我们已经学习了如何使用Scrapy框架来编写爬虫项目&#xff0c;那么具体Scrapy框架中底层是如何架构的呢&#xff1f;Scrapy主要拥有哪些组件&#xff0c;爬虫具体的实现过程又是怎么样的呢&#xff1f; 为了更深入的了解Scrapy的相关只是&#xff0…

Chatgpt 指令收集

在使用 ChatGPT 时&#xff0c;当你给的指令越精确&#xff0c;它的回答会越到位&#xff0c;举例来说&#xff0c;假如你要请它帮忙写文案&#xff0c;如果没给予指定情境与对象&#xff0c;它会不知道该如何回答的更加准确。 一、写报告 1、我现在正在 [报告的情境与目的]。…

低代码平台应该具备哪些能力?

什么样的低代码无代码平台才算好的平台呢&#xff0c;Gartner 共列出了低代码平台的11个关键能力维度&#xff1a; 1、易用性。易用性是标识低代码平台生产力的关键指标&#xff0c;是指在不写代码的情况下能够完成的功能的多少。 2、用户体验。一般来说&#xff0c;独立软件开…

2023Q2押题,华为OD机试用Python实现 -【机智的外卖员】

最近更新的博客 华为 od 2023 | 什么是华为 od,od 薪资待遇,od 机试题清单华为 OD 机试真题大全,用 Python 解华为机试题 | 机试宝典【华为 OD 机试】全流程解析+经验分享,题型分享,防作弊指南华为 od 机试,独家整理 已参加机试人员的实战技巧本篇题解:机智的外卖员 题目…

Java中的死锁

1.什么是死锁 死锁&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期的阻塞&#xff0c;线程不可能正常终止。 【举个栗子】滑稽老铁和女生去吃饺子。吃饺子需要醋和饺子。 滑稽老哥抄起了酱油瓶&#xff0c;女生抄起…

【技术教程】在EasyCVR平台中打开第三方桌面端应用的实现过程

EasyCVR视频融合平台基于云边端协同架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台支持海量视频汇聚管理&#xff0c;可支持多协议接入&#xff0c;包括市场主流标准协议与厂家私有协议及SDK&#xff0c;如&#xff1a;国标GB28181、RTMP、RTSP/Onvif、海…

vue 引入高德地图当前定位失败 Get ipLocation failed.Geolocation permission denied.

getCurrentPosition 返回的 message 原因解析 &#xff1a; Get ipLocation failed&#xff1a;IP 精确定位失败&#xff0c;精确IP定位服务目前无法完全覆盖所有用户 IP&#xff0c;失败率在5%左右。sdk 定位失败&#xff1a;检查 sdk的 key 是否设置好&#xff0c;以及 webv…

如何远程连接SQLServer数据库

如何远程连接SQLServer数据库 准备工作 1.打开 选中如下的连接方式 连接成功后就会出出现 2.连接成功后&#xff1a;右键设置属性 安全性设置&#xff1a;如下图所示 设置连接属性&#xff1a; 设置完成之后点击完成&#xff01;&#xff01;&#xff01; 3.打开 启动sqlSe…

华为OD机试用JS实现 -【查找树中的元素 or 查找二叉树节点】(2023-Q2 押题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:查找树中的元素 or 查找二叉树…

2023年南京晓庄学院五年一贯制专转本食品科学与工程专业考试大纲

2023年南京晓庄学院五年一贯制专转本食品科学与工程专业考试大纲 专业科目一 &#xff1a;微生物学基础 【参考书目】《食品微生物学》&#xff0c;杨玉红主编&#xff0c; 中国质检 出版社/中国标准出版社&#xff0c;2017(十三五高职高专院校规划教材) 【考试大纲】 ( 一) 考…
最新文章