自学内容网 自学内容网

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

344.反转字符串

题目

参考文章

思路:本题的运用双指针的方式,掉换两个头尾两个元素,然后指针收缩再继续掉换,这里无论字符串大小是否为奇偶,都是可以判断出来的

代码:

class Solution {
    public void reverseString(char[] s) {
        int left=0;
        int right=s.length-1;
        while(left<right){
            char temp=s[left];
            s[left]=s[right];
            s[right]=temp;
            right--;
            left++;
        }
        
    }
}

541. 反转字符串II

题目

参考文章

思路:从题目可以知道,每2k个字符中反转前k个字符,所以每次循环得一次取到2k个字符,然后开始下标为当前i值,而末尾下标就是取:字符串最大长度和从start开始的第k个长度两者的最小值。然后循环交换值,

代码:

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch=s.toCharArray();
        for(int i=0;i<ch.length;i+=2*k){
            int start=i;
            int end=Math.min(ch.length-1,start+k-1);
            while(start<end){
                char temp=ch[start];
                ch[start]=ch[end];
                ch[end]=temp;

                end--;
                start++;
            }
        }
        return new String(ch);
    }
}

54.替换数字 

题目

参考文章

思路:判断字符串s中是否有数值出现,如果有数值就len+5(这里加5是因为本身字符串的数值占一个位置,而number是六个位置,最终加了五个位置上去),这里len最终存储的是加入number后的长度。然后设置要给res数组,存储最终加入number后的字符串;这里我们是用从后往前的方式加入元素,大大减少了工作量。先把原来字符串s中的元素加入到数组res中,然后循环,设置i和j,i指向旧数组的末尾位置,j指向的是新数组的位置,判断当前位置是否是数值,如果是,则新数组位置的j--,并存入number元素中的r字符,以此类推;如果不是数值,就直接把该位置的的i赋值给当前j所在的位置,然后i--,这里j是在数组中实现了j--,故在for循环上不显示。最后打印res即可

代码:

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[] res = new char[len];
        for(int i = 0;i < s.length();i++){
            res[i] = s.charAt(i);
        }
        
        for(int i = s.length()-1,j = len-1;i >= 0;i--){
            if('0' <= res[i] && res[i] <= '9'){
                res[j--] = 'r';
                res[j--] = 'e';
                res[j--] = 'b';
                res[j--] = 'm';
                res[j--] = 'u';
                res[j--] = 'n';
            }else{
                res[j--] = res[i];
            }
        }
        
        System.out.println(res);
    }
}


原文地址:https://blog.csdn.net/cccoffer/article/details/142372006

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!