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

代码随想录刷题记录(二十五)——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.kler.cn/a/387189.html

相关文章:

  • 贪心算法day03(最长递增序列问题)
  • 力扣104 : 二叉树最大深度
  • idea 解决缓存损坏问题
  • Objection
  • Unity3D 包体裁剪与优化详解
  • 推荐一款好用的postman替代工具2024
  • 【信号处理】绘制IQ信号时域图、星座图、功率谱
  • 吾店云介绍 – 中国人的WordPress独立站和商城系统平台
  • docker进行SRS直播服务器搭建
  • WPS 默认模板修改
  • 关于qiskit版本>1.0.0,execute函数被替换
  • Java基于微信小程序的美食推荐系统(附源码,文档)
  • ONLYOFFICE 办公套件测评:高效办公新选择
  • 「Mac畅玩鸿蒙与硬件32」UI互动应用篇9 - 番茄钟倒计时应用
  • Python自动化运维:配置管理工具到自动化部署与版本控制
  • Flutter错误: uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared
  • Shortcut Learning in In-Context Learning: A Survey
  • MySQL 权限困境:从权限丢失到权限重生的完整解决方案20241108
  • Android Framework AMS(11)广播组件分析-2(注册/注销流程解读)
  • PDS的主要部件
  • 50个广泛使用的SQL关键字
  • 在 Ubuntu 上安装 Redis 并为其设置登录密码
  • go桌面框架Fyne最全api文档
  • PVE纵览-深入了解PVE中的防火墙功能
  • 数组和字符串的es6新方法使用和综合案例
  • 华为OD机试真题-矩形绘制