牛客刷题一:将字符串数字中为偶数位的数字进行翻转,将翻转后的结果进行输出

题目看上去很简单
但是刚开始想了挺久没动键盘…
最初的想法,要记录索引,又要记录索引上的值,所以想到了Map集合,但是Map集合没有索引,也没有办法根据索引排序,也不好给值倒序
后来想到一个办法:

public static String change(String number) {
        char[] chars = number.toCharArray();
        int[] flag = new int[chars.length];
        loop:for (int i = 0; i < chars.length; i++) {
            if(chars[i]%2==0){
                for (int j = chars.length - 1; j >= 0; j--) {
                    if(chars[j]%2==0){
                        if(flag[i]==0&&flag[j]==0){
                            char temp =chars[i];
                            chars[i]=chars[j];
                            chars[j]=temp;
                            flag[i]=1;
                            flag[j]=1;

                        }else
                            break loop;
                    }
                }
            }
        }
        return new String(chars);
    }

大概的思路是:嵌套for循环一个正向找偶数,一个逆向找偶数,难以避免的偶数被重复找到,所以定义一个flag数组,flag的索引和chars的索引一一对应,如果chars索引对应的值已经被调换过位置,那么flag对应的索引数值改为1。

但是后来一想到正向找数和逆向找数,想到了快排的底层实现

链接: 这个链接点进去看-5.3快速排序.

想到了另一种思路

public static String change(String number) {       
	//字符串转char数组
    char[] numbers = number.toCharArray();
    //定义左右指针
    int left=0;
    int right=number.length()-1;
    //都找到偶数则交换
    while (left<right){
        //从左边找到第一个偶数
        while(left<right&&numbers[left]%2!=0)
            left++;
        //从右边找到第一个偶数
        while(left<right&&numbers[right]%2!=0)
            right--;
        //交换
        char temp=numbers[left];
        numbers[left]=numbers[right];
        numbers[right]=temp;
        //更新指针
        left++;
        right--;
    }
    return String.valueOf(numbers);
}

一点拙见,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值