《剪花布条》:从花布条中尽可能剪出几块小饰条

news/2024/12/23 1:14:48/

目录

一、题目

二、思路

1、代码中要使用的String类中的方法 

(1)判断 s 中是否有 t 

(2)将 s 分割  

2、递归判断

三、代码

详细注释版本

简化注释版本


 

一、题目

题目:剪花布条           题目链接:剪花布条

一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 

输入描述:
        输入包含多组数据。

        每组数据包含两个字符串s,t,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。

输出描述:
        对应每组输入,输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就输出0,每个结果占一行。
输入
abcde a3
aaaaaa aa
输出
0
3

二、思路

        主要是递归(大规模问题化解为相同的小规模问题),以及方法的使用。

        要判断 s 中有几个 t ,从前向后判断,每遇到一个 t,结果值就+1。然后再将 t 从 s 中全部切除(也包含前面的不是 t 的,因为不是 t,所以和我们的结果值就无关了,就可以切掉)。然后再判断剩下的 s 中 有几个 t。以此类推。

1、代码中要使用的String类中的方法 

(1)判断 s 中是否有 t 

  • s.indexOf( t ):从前向后判断,s 中是否有 t。有则返回 t 所在的下标,如果没有就返回 -1。

注意:传入的参数 t 可以是字符,也可以是字符串。当时字符串时,返回的是 t 的首字符所在的下标。

(2)将 s 分割  

s.substring( ):返回字符串的子字符串。传入的参数有两种形式:

  • s.substring( int index ):切除 index 下标之前的字符串。(删除前 index 个字符)
  • s.substring( int beginIndex, int endIndex ):返回下标[ beginIndex, endIndex ) 内的字符串。

2、递归判断

        根据 indexOf 方法的返回值进行判断,如果不为 -1,就进行递归。为 -1,就返回0 。

三、代码

详细注释版本

import java.util.*;
public class Main {private static int func(String str1, String str2) {//str1.indexOf(str2)方法:查找str1中str2的下标,若str1中没有str2,就返回-1//当查找的是字符串时,返回的是str2首字符在str1中的下标int i =str1.indexOf(str2);if(i == -1) {//说明str1中没有str2return 0;}//str1中有str2,则在str1中将满足的前半部分(包括包含的str2)切除//再判断str1中剩下的部分有没有str2,然后重复操作。//将大规模问题化成了相同的小规模问题,因此可以使用递归//1 是因为代码执行到这里说明 i!=-1,即肯定是有一个str2的,所以加一return 1 + func(str1.substring(i + str2.length()),str2);}public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()) {String str1 = sc.next();String str2 = sc.next();int ans = func(str1,str2);System.out.println(ans);}}
}

简化注释版本

import java.util.*;
/*** Created with IntelliJ IDEA.* Description:剪花布条* User: WangWZ* Date: 2023-04-13* Time: 14:53*/
public class Main {private static int func(String str1, String str2) {int i =str1.indexOf(str2);if(i == -1) {return 0;}//判断str1中剩下的部分有没有str2,递归return 1 + func(str1.substring(i + str2.length()),str2);}public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()) {String str1 = sc.next();String str2 = sc.next();int ans = func(str1,str2);System.out.println(ans);}}
}

http://www.ppmy.cn/news/46764.html

相关文章

【学习笔记】ARC159

D - LIS 2 因为没有让你求方案数,所以还是比较好做的。 如果每一个连续段都退化成一个点,那么答案就是直接求 L I S LIS LIS。 否则,假设我们选了一些连续段把它们拼起来形成答案,显然我们有 r i 1 ≥ l i r_{i1}\ge l_i ri1​…

数值区间的模糊匹配,二分查找的应用

先看图: 需求很明确,要根据左边的值,显示右边的值。 比如,现在拿到的值是 17.12,那么应该显示成 15;拿到 17.599 ,那么应该显示成 20. 先找规律: 为了便于说明,暂且将左边的值设为 x, 右边的值设为 y. 第一行和最后一行可以写死成 0 与 1500;余下的每行,x 的区间是…

excel中补齐IP,使得每一段为三位

有一个EXCEL中有IP信息。为10.198.37.183,需要补齐为010.198.037.183;10.68.80.74补齐为010.068.080.074 网上搜了的补齐IP的函数为 TEXT(LEFT(D36,FIND(“.”,D36)-1),“000.”)&TEXT(MID(D36,FIND(“.”,D36)+1,FIND(““,SUBSTITUTE(D36,”.“,””,2))-FIND(“.”,D3…

人工智能论文的风格特点

搞清楚AI领域论文的风格特点是写出一篇高质量AI论文的前提,AI领域的论文有如下显著特点。 1. 论文的架构非常清晰且富有逻辑。一篇高质量的AI论文,读者通过大致扫一眼论文的各级标题就能够对论文的写作思路形成清晰的认识,明白论文各部分之间…

Visual Studio Code跳转到CSS定义

Visual Studio Code 快速跳转到 VUE文件 或 CSS文件的定义位置(跳转到class定义,跳转到css定义),插件Css Peek、Vue Peek 对提升开发效率上,事半功倍。 目录 1、跳转到CSS定义 1.1、CSS Peek 1.2、Vue Peek 2、其他…

水务行业怎么运用智能配电

摘要:在构建智慧水务和“双碳”时代背景下,智能配电系统在水务行业中发挥日益突出的重要作用。本文首先回顾了智能配电系统在水务行业的发展历程,并对其应用现状进行了分析,进而展望了智能配电系统在水务行业的发展趋势。 关键词&…

SpringMVC03-文件上传、异常处理、拦截器

SpringMVC03 SpringMVC的文件上传 一 、文件上传的前端必要前提 form 表单的 entcype取值必须是:multipart/form-data。默认值:application/x-www-form-urlencoded,是表单请求正文的类型method 属性取值必须是 post提供一个文件选择域 二…

Flink时间属性

1.概述 Flink支持三种与流数据处理相关的时间概念:Processing Time、Event Time和Ingestion Time。具体如下图所示: 当前Flink仅支持Processing Time和Event Time EventTime:您提供的事件时间(通常是数据的最原始的创建时间&…