代码随想录算法训练营第七天|344. 反转字符串、541. 反转字符串 II、 卡码网:54. 替换数字

目录

344. 反转字符串

题目链接:

题目要求:

题目用例:

实现思路:

实现代码:

测试代码:

541. 反转字符串 II

题目链接:

题目要求:

题目用例:

实现思路:

实现代码:

测试代码:

卡码网:54. 替换数字

题目链接:

题目要求:

实现思路:

实现代码:

 


344. 反转字符串

题目链接:

344. 反转字符串 - 力扣(LeetCode)

题目要求:

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

题目用例:

示例 1:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:

输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符

实现思路:

1.定义首尾指针

2.遍历数组,条件为start<end,定义临时变量来保存交换首尾指针的值,更新首尾指针值(start++和end--)

实现代码:

class Solution {
    public void reverseString(char[] s) {
        //定义双指针
        int start=0, end=s.length-1;
        //遍历一半的char数组
        while(start<end){
            char temp=s[start];
            s[start]=s[end];
            s[end]=temp;
            start++;
            end--;
        }
    }
}

测试代码:

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
 /*       示例 1:

        输入:s = ["h","e","l","l","o"]
        输出:["o","l","l","e","h"]
        示例 2:

        输入:s = ["H","a","n","n","a","h"]
        输出:["h","a","n","n","a","H"]*/
        Solution solution = new Solution();
        //示例1:
        char[] s1={'h','e','l','l','o'};
        solution.reverseString(s1);
        System.out.println(Arrays.toString(s1));



        //示例2:
        char[] s2={'h','a','n','n','a','h'};
        solution.reverseString(s2);
        System.out.println(Arrays.toString(s2));
    }
}

541. 反转字符串 II

题目链接:

541. 反转字符串 II - 力扣(LeetCode)

题目要求:

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

题目用例:

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

实现思路:

1.将字符串转为char数组

2.进入for循环,循环条件为:i<charArray.length,每次更新:i += 2 * k

3.在for循环中定义首尾指针,首指针为i,尾指针为Math.min(i + k - 1, charArray.length - 1),防止end不超过数组范围

4.在for循环,嵌套while循环遍历数组,条件为start<end,定义临时变量来保存交换首尾指针的值,更新首尾指针值(start++和end--)

5.将字符数组转换为字符串并返回

实现代码:

import java.util.Arrays;  
  
class Solution {  
    public String reverseStr(String s, int k) {  
        char[] charArray = s.toCharArray();  
        for (int i = 0; i < charArray.length; i += 2 * k) {  
            int end = Math.min(i + k - 1, charArray.length - 1); // 确保end不超过数组末尾  
            int start = i;  
            while (start < end) {  
                char temp = charArray[start];  
                charArray[start] = charArray[end];  
                charArray[end] = temp;  
                start++;  
                end--;  
            }  
        }  
        return new String(charArray); // 将字符数组转换为字符串  
    }  
}

测试代码:

public class Test {
    public static void main(String[] args) {
        /*示例 1:

        输入:s = "abcdefg", k = 2
        输出:"bacdfeg"
        示例 2:

        输入:s = "abcd", k = 2
        输出:"bacd"*/
        Solution solution = new Solution();
        //示例1:
        String s1="abcdefg";
        int k1=2;
        System.out.println(solution.reverseStr(s1,k1));

        //示例2:
        String s2="abcd";
        int k2=2;
        System.out.println(solution.reverseStr(s2,k2));
    }
}

卡码网:54. 替换数字

题目链接:

54. 替换数字(第八期模拟笔试) (kamacoder.com)

题目要求:

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。

例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

实现思路:

1.编写一个辅助方法(solve)

2.创建一个StringBuilder类(str)以便后续字符串拼接,将字符串转换成char数组

3.遍历char数组,调用内部方法,判断指定字符是否为数字字符

   如果是,让str拼接字符串“number”代替数字字符,否则,让str拼接原本的字符

4.在main函数中调用solve方法,输出str

实现代码:

import java.util.Scanner;

class Main {
/*    给定一个字符串 s,它包含小写字母和数字字符,
    请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。
    例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。*/
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        solve(s);
    }
    public static void solve(String s) {
        StringBuilder str = new StringBuilder();
        char[] charArray = s.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            //用于检查指定的字符是否为数字字符
            if (Character.isDigit(charArray[i])) {
                str.append("number");
            }
            else {
                str.append(charArray[i]);
            }
        }
        System.out.println(str);
    }
}

 

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值