【优化方案】Java 将字符串中的星号替换为0-9中的数字,并返回所有可能的替换结果
需求
将输入的字符串中的星号替换为0-9中的数字,并返回所有可能的替换结果,允许存在多个
*
号。
分析: 在每个星号位置,我们需要进行 0-9 的循环遍历,因此每个星号位置都有 10 种可能性。如果字符数组中有k个星号,那么总共有 10k 个可能的替换结果。
即输入12345*
时,我们会得到 10 个结果,期望的结果如下:
123450
123451
123452
123453
123454
123455
123456
123457
123458
123459
输入1234**
时,我们会得到 100 个结果,期望的结果如下:
123400
123401
123402
......
123499
输入******
时,我们会得到 1000000 个结果。
解决方案
我们可以使用递归方式来依次实现将字符串中的星号替换为 0-9 的数字。
/*** 将输入的字符串中的星号替换为0-9中的数字,并返回所有可能的替换结果* @param input 输入的字符串* @return 所有可能的替换结果*/
public static List<String> replaceStars(String input) {List<String> result = new ArrayList<>();int index = input.indexOf('*'); // 找到第一个星号的位置if (index == -1) { // 如果字符串中没有星号result.add(input); // 直接将原字符串添加到结果列表中} else {for (int i = 0; i < 10; i++) { // 循环0-9中的数字// 将星号替换为当前数字String replaced = input.substring(0, index) + i + input.substring(index + 1);// 对替换后的字符串再次调用replaceAsterisks方法,直到字符串中不再有星号result.addAll(replaceStars(replaced));}}return result;
}
- 代码中的
replaceStars
方法会首先查找输入字符串中的第一个星号的位置。 - 如果找不到星号,表示已经完成了一次替换,将当前字符串添加到结果列表中;
- 否则,就用 0-9 中的数字依次替换星号,并对替换后的字符串再次调用
replaceStars
方法,直到字符串中不再有星号。 - 最后收集并返回所有的替换结果。
代码优化
我们可以通过下标索引追踪当前要处理的字符索引。
优化后如下:
/*** 递归辅助函数,用于将字符数组中的星号替换为0-9之间的数字* @param chars 字符数组* @param index 当前处理的字符索引* @param result 存储替换结果的列表*/
private static void replaceStars(char[] chars, int index, List<String> result) {if (index == chars.length) { // 如果已经处理完了所有字符result.add(new String(chars)); // 将字符数组转换为字符串并添加到结果列表中return;}if (chars[index] == '*') { // 如果当前字符是星号for (char c = '0'; c <= '9'; c++) { // 循环0-9中的数字chars[index] = c; // 将星号替换为当前数字replaceStars(chars, index + 1, result); // 继续处理下一个字符}chars[index] = '*'; // 恢复星号,以便处理下一个星号} else {replaceStars(chars, index + 1, result); // 如果当前字符不是星号,则继续处理下一个字符}
}
- 首先判断是否已经处理完了所有字符,即
index
是否等于chars
数组的长度。如果是,则表示已经处理完所有字符,此时将字符数组转换为字符串并添加到结果列表result
中,然后返回。 - 如果当前字符是星号,就需要将星号替换为 0-9 之间的数字。通过一个循环遍历 0-9 中的数字,每次将星号替换为当前数字,并递归调用自身处理下一个字符(即将
index
加1)。这样会产生多次递归调用,每次调用都会处理下一个星号位置的数字替换。 - 在循环结束后,需要恢复星号,以便处理下一个星号位置的数字替换。
- 如果当前字符不是星号,则直接递归调用自身,继续处理下一个字符。
效率分析对比
优化前后的方法效率对比如下:
执行次数 | 数据量 | 花费时间(ms) | [优化]花费时间(ms) |
---|---|---|---|
1 | 10 | 0 | 0 |
2 | 102 | 0 | 0 |
3 | 103 | 3 | 0 |
4 | 104 | 7 | 1 |
5 | 105 | 44 | 6 |
6 | 106 | 238 | 42 |
本文所实现方法的时间复杂度是 O(10k),其中 k 是字符数组中星号的数量。
随着星号数量的增加,可能的替换结果数量呈指数级增长,那么这个方法会变得非常耗时。因此,在处理具有大量星号的字符数组时,考虑到时间复杂度的增长,需要优化算法处理。
相关文章:
【优化方案】Java 将字符串中的星号替换为0-9中的数字,并返回所有可能的替换结果
需求 将输入的字符串中的星号替换为0-9中的数字,并返回所有可能的替换结果,允许存在多个*号。 分析: 在每个星号位置,我们需要进行 0-9 的循环遍历,因此每个星号位置都有 10 种可能性。如果字符数组中有k个星号&#x…...
C语言复习-链表
链表: 特点: 通过 next 指针 把内存上不连续 的几段数据 联系起来 set nu -- 打印行号 概念: 一种数据结构 -- 数据存放的思想 比如 -- 数组 -- 内存连续的一段空间,存放相同类型的一堆数据 缺点 -- 增删元素很 难 -- 不灵活 --> 引入链表 next指针的初步认识…...

Redis面试题-缓存雪崩、缓存穿透、缓存击穿问题
1 穿透: 两边都不存在(皇帝的新装) (黑名单) (布隆过滤器) 2 击穿:一个热点的key失效了,这时大量的并发请求直接到达数据库. (提前预热) 3 雪崩:…...

【Node.js】npx
概述 npx 可以使用户在不安装全局包的情况下,运行已安装在本地项目中的包或者远程仓库中的包。 高版本npm会自带npx命令。 它可以直接运行 node_modules/.bin 下的 exe 可执行文件。而不像之前,我们需要在 scripts 里面配置,然后 npm run …...
hive授予指定用户特定权限及beeline使用
背景:因业务需要,需要使用beeline对hive数据进行查询,但是又不希望该用户可以查询所有的数据,希望有一个新用户bb给他指定的库表权限。 解决方案: 1.赋权语句,使用hive管理员用户在终端输入hive进入命令控…...

Vmware虚拟机无法用root直连说明
Vmware虚拟机无法用root直连说明 背景目的SSH服务介绍无法连接检查配置 背景 今天在VM上新装了一套Centos-stream-9系统,网络适配器的连接方式采用的是桥接,安装好虚拟机后,在本地用ssh工具进行远程连接,ip、用户、密码均是成功的…...

Visio中存在问题的解决方法
公式缩放 mathtype公式在visio缩放之后,出现了变形。 解决方法:每次输入公式都通过 插入->对象->mathType Equation 新建一个公式。可以避免 注:网上有的说在word中使用mathtype编写公式,之后复制到visio中。 插入波形 选择…...

taro之Swiper的使用
图样: 往往我们需要轮播图去显示我们想要的图片之类的 这是工作的代码 <View classNametop-title><SwiperclassNamebanner-swiperinterval{3000}circularautoplay>{homeBannerList.map((item) > {return (<SwiperItem key{item.id}><View…...

正大国际:金融行业发展趋势
2024金融科技趋势研究报告 大模型生态揭秘!金融行业迎来变革,中控成生态核心,大模型在金融行业的应用 随着大模型的不断发展,越来越多的金融机构开始尝试在一些业务场景中引入大模型和生成式A能力,预计2024年,领先的金…...
vue中实现超出一行 展开和收起的功能
html中: <divclass="txttype"ref="txttype"style="margin-bottom: 6px":class="hidetext == true ? hidetext : "><div style="width: 96%"><el-tagtype="info"style="margin-right: 10px&…...

记录一次使用cert-manager-颁发CA证书
一、官网 SelfSigned - cert-manager Documentation 二、例子 apiVersion: v1 kind: Namespace metadata:name: sandbox --- apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata:name: selfsigned-issuer spec:selfSigned: {} --- apiVersion: cert-manager.io/v…...
生成式AI的风险与挑战
生成式AI,即通过训练数据生成新的文本、图像或音频等内容的人工智能技术,具有很多潜在的风险与挑战。 1. 信息可信度:生成式AI往往是基于大量训练数据,但这些数据可能存在偏见、错误或虚假信息。生成的内容可能会引入不准确或误导…...

让IIS支持.NET Web Api PUT和DELETE请求
前言 有很长一段时间没有使用过IIS来托管应用了,今天用IIS来托管一个比较老的.NET Fx4.6的项目。发布到线上后居然一直调用不同本地却一直是正常的,关键是POST和GET请求都是正常的,只有PUT和DELETE请求是有问题的。经过一番思考忽然想起来了I…...
运维小技能:IP多号段配置、重置Mac电脑密码、修改系统级别的文件
文章目录 I 清除last_run_metadata_path数据。1.1 删除文件1.2 清空一个目录下所有文件的内容1.3 定期重启Logstash,并清除last_run_metadata_path数据。II 配置IP2.1 CentOS系统的IP参数2.2 shell脚本-静态网络配置III 电脑的IP多号段配置3.1 Mac电脑3.2 windows系统IV mac Ro…...
Docker的Ubuntu上的安装教程及相关命令
一、简介 Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,这个容器是完全使用沙箱机制(限制容器内部对系统资源的访问),更重要的是容器性能开销极低。 正是因为…...
一些常见的nacos问题和答案
什么是Nacos?它的作用是什么? Nacos是一个动态服务发现、配置管理和服务管理平台。它的作用是帮助应用程序实现服务注册与发现、动态配置管理和服务健康管理等功能。 Nacos的核心功能包括哪些: 服务注册与发现:Nacos支持基于DN…...

华为OD机22道试题
华为OD机试题 2.查找小朋友的好朋友位置 在学校中,N 个小朋友站成一队,第 i 个小朋友的身高为 height[i],第 i 个小朋友可以看到第一个比自己身高更高的小朋友j,那么 j 是 i 的好朋友 (要求:j>i) 。 请重新生成一个…...

什么是Prompt Tuning?
本文是观看视频What is Prompt Tuning?后的笔记。 大语言模型(如ChatGPT )是基础模型,是经过互联网上大量知识训练的大型可重用模型。 他们非常灵活,同样的模型可以分析法律文书或撰写文章。 但是,如果我们需要用其解…...
正则表达式篇
文章目录 1. 导入re模块2. 正则表达式的基本模式3. re模块的主要函数和方法4. 示例 正则表达式(Regular Expression,常简写为regex或regexp)是一种强大的文本处理工具,它使用一种特殊的字符序列来帮助用户检查一个字符串是否与某种…...
CAST(columnA AS VARCHAR(255)) AS fieldA报错的问题
列类型转换,不能使用VARCHAR,是能使用CHAR 应该改为: CAST(columnA AS CHAR(255)) AS fieldA报错的问题...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...