当前位置: 首页 > news >正文

代码随想录刷题记录(二十五)——54. 替换数字

(一)问题描述

54. 替换数字(第八期模拟笔试)icon-default.png?t=O83Ahttps://kamacoder.com/problempage.php?pid=1064给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

输入描述:输入一个字符串 s,s 仅包含小写字母和数字字符。

输出描述:打印一个新的字符串,其中每个数字字符都被替换为了number

示例:
输入:a1b2c3

输出:anumberbnumbercnumber

 提示:

  • 数据范围:1 <= s.length < 10000。

(二)解决思路

1. 数组+双指针

       题目本意是解决数组填充类的问题。将原字符串转换为数组,数组的长度需要在原长度的基础上加上number的长度。扩充数组的长度后,再按照由后往前的顺序将number填充到合适的位置上。这里不采用从前往后的方法填充,而是采用从后往前的方法填充,这是因为对于数组这一连续的空间,从前往后填充时需要将填充部分之后的元素整体向后移动,这一操作会增加时间复杂度。

        对于其他语言,这种方式可以不使用额外的空间,但是Java一定要使用额外的空间,因为Java的String是不可修改的。

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String s = sc.next();int len = s.length();for (int i = 0; i < s.length(); i++) {if (s.charAt(i) >= 0 && s.charAt(i) <= '9') {len += 5;}}char[] ret = new char[len];for (int i = 0; i < s.length(); i++) {ret[i] = s.charAt(i);}for (int i = s.length() - 1, j = len - 1; i >= 0; i--) {if ('0' <= ret[i] && ret[i] <= '9') {ret[j--] = 'r';ret[j--] = 'e';ret[j--] = 'b';ret[j--] = 'm';ret[j--] = 'u';ret[j--] = 'n';} else {ret[j--] = ret[i];}}System.out.println(ret);}
}

2. StringBuffer

       我是用Java的StringBuffer来做的这道题。我不知道这样的做法是不是合适,因为这道题的本意是想考察数组的填充问题。不过用StringBuffer来做确实简单得不是一星半点。

import java.util.Scanner;
public class Main{public static String changeNumber(String s){StringBuffer res=new StringBuffer();for(int i=0;i<s.length();i++){if(s.charAt(i)<97){res.append("number");}else{res.append(s.charAt(i));}}return res.toString();}public static void main(String args[]){Scanner scanner=new Scanner(System.in);if(scanner.hasNext()){String str=scanner.next();String result=changeNumber(str);System.out.println(result);}scanner.close();}
}

(三)易错点

       这道题是采用ACM模式来做的。我是简单过了一遍Java基础,然后通过刷题来练习Java的使用,所以有些地方显得不是很熟练。

1. 我采用ASCII码的大小比较来判断小写字母和阿拉伯数字。小写字母的ASCII码范围在97-122,数字在48-57,大写字母在65-90.

2. Java可以使用Scanner来获取用户在控制台的输入,scanner对象使用完之后要记得scanner.close(),这里close是个方法,要记得加小括号

3.在当前类的main函数中调用成员方法,需要将该成员方法也设置为静态方法,即加上static

4.Java中单引号用于char类型,字符串类型要用双引号

5.对每次读取的str的操作要放在if(scanner.hasNext())判断内


http://www.mrgr.cn/news/69595.html

相关文章:

  • mmsegmentation: 安装 并使用自定义数据集进行训练 ·1
  • Webpack 1.13.2 执行 shell 命令解决 打印时没有背景色和文字颜色的问题
  • git上feature合并到development分支
  • Python 绘图工具详解:使用 Matplotlib、Seaborn 和 Pyecharts 绘制散点图
  • SharePoint Online共享链接的参数是做什么的?
  • Rust面向对象特性
  • RabbitMQ 篇-深入了解延迟消息、MQ 可靠性(生产者可靠性、MQ 可靠性、消费者可靠性)
  • 【java】通过<类与对象> 引入-> 链表
  • PHP反序列化漏洞(非常详细),零基础入门到精通,看这一篇就够了
  • Halcon 自定义滤波核
  • C++面向对象面试题及参考答案
  • PHP API的数据交互类型设计
  • Redis中的线程模型
  • Pytest-Bdd-Playwright 系列教程(8):pytest的高级代码生成功能
  • 6层板设计常用知识笔记
  • 密码学的基本原理
  • 【PB】 使用for循环,循环次数比较多时,datastore 获取数据异常的问题。
  • 数字信号处理Python示例(10)生成平稳信号和非平稳信号
  • Python练习15
  • 分页存储小总结
  • JavaScript day02 笔记
  • 基于Spring Boot的养老保险管理系统的设计与实现,LW+源码+讲解
  • 高速光耦——推动工业生产自动化飞跃的关键力量
  • 【网络原理】万字详解 UDP 和 TCP
  • 现场工程师日记-MSYS2迅速部署PostgreSQL主从备份数据库
  • 今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 11月10日,星期日