代码随想录算法训练营 day 8 |344.反转字符串,541. 反转字符串II,卡码网:54.替换数字

一、反转字符串

题目及代码随想录解析

解题思路

本题的解法是将字符串最左边和最右边的字母交换顺序,然后由两边向中间靠拢进行交换。本题可以采用for循环和temp来完成。具体代码如下:

class Solution {
    public void reverseString(char[] s) {
        //left为字符串最左边字母,right为字符串最右边字母
        int left=0,right=s.length-1;
        while(left<right){
            char temp=s[left];
            s[left]=s[right];
            s[right]=temp;
            left++;
            right--;
        }
    }
}

二、反转字符串||

题目及代码随想录解析

解题思路

本题难度略有提升,指定了字符串反转的规则,不过仍然可以模仿第一题的解题方法。

具体代码如下:

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch=s.toCharArray();
        for(int i=0;i<ch.length;i+=2*k){
            //left为字符串开始字母的下标,right为字符串结束字母的下标
            //如果反转后剩余长度不足2k,则right剩余长度,否则要满足right-left=k
            int left=i,right=Math.min(ch.length-1,left+k-1);
            while(left<right){
                char temp=ch[left];
                ch[left]=ch[right];
                ch[right]=temp;
                left++;
                right--;
            }
        }
        return new String(ch);
    }
}

三、替换数字

题目及代码随想录解析

解题思路

本题首先要确定字符串中共有几个数字,然后根据数字个数扩展数组长度,再将“number”t填入到数组中去。具体解法如下:

import java.util.*;
public class Main{
    public static void main (String[] args) {
    Scanner scanner=new Scanner(System.in);
    String s=scanner.next();

    //l用来记录数组的总长度
    int l=s.length();
    for(int i=0;i<s.length();i++){

        //每发现一个数字,就让l=l+5
        if(s.charAt(i)>='0' && s.charAt(i)<='9')
            l+=5;
    }
    char[] ns=new char[l];

    //先将原数组中的值保存到新数组中
    for(int i=0;i<s.length();i++){
        ns[i]=s.charAt(i);
    }

    //从后往前填充数组,原因是因为这样可以减少数组移动的次数
    for(int i=s.length()-1,j=l-1;i>=0;i--){
        if('0'<=ns[i]&& '9'>=ns[i]){
            ns[j--]='r';
            ns[j--]='e';
            ns[j--]='b';
            ns[j--]='m';
            ns[j--]='u';
            ns[j--]='n';
        }
        else{
            ns[j--]=ns[i];
        }
    }
   System.out.println(ns);
    }

}

四、今日收获

今天的题目中体来说不是很难,不过需要知道一些string和char相关的函数。acm模式还不够熟练,需要多练习。

今日学习+解题+博客=1h30min。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值