字符串变换最小字符串

该编程代码解决了一个问题,给定一个字符串,仅允许一次字符交换以达到字典序最小。首先将字符串转换为字符数组并排序,然后检查是否需要交换,如果需要则找到第一个不同的字符进行交换并停止。输出经过优化后的最小字符串。
摘要由CSDN通过智能技术生成
题目描述

给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。

变换规则:交换字符串中任意两个不同位置的字符。

输入描述

一串小写字母组成的字符串s

输出描述

按照要求进行变换得到的最小字符串。

备注
  • s是都是小写字符组成
  • 1 ≤ s.length ≤ 1000

用例
输入abcdef
输出abcdef
说明abcdef已经是最小字符串,不需要交换。
输入bcdefa
输出acdefb
说明a和b进行位置交换,可以得到最小字符串

public class 字符串变换最小字符串 {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        String s = sc.nextLine();
        System.out.println(getResult(s));
    }

    private static String getResult(String s) {
        char[] minChars = s.toCharArray();
        Arrays.sort(minChars);
        String misS = new String(minChars);
        char[] sArr = s.toCharArray();
        if(s.equals(misS)){
            return misS;
        }
        for (int i = 0; i < s.length(); i++) {
            if(minChars[i]!=sArr[i]){
                char temp = sArr[i];
                sArr[i]=minChars[i];
                int index=s.lastIndexOf(minChars[i]);
                sArr[index]=temp;
                break;
            }
        }
        return new String(sArr);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值