【华为OD题库-073】字符串变换最小字符串-java

题目

题目描述:

给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。变换规则:交换字符串中任意两个不同位置的字符。
输入描述:

---串小写字母组成的字符串s
输出描述:

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

s是都是小写字符组成

1<=s.length<=1000
示例1
输入:

abcdef
输出:

abcdef
说明:

abcdef已经是最小字符串,不需要交换
示例2
输入∶

bcdefa
输出:

acdefb
说明:

a和b进行位置交换,可以得到最小字符串

思路

将字符串中的字符按字典序排序(需要携带索引信息,所以list中可以考虑存放int\[\]的形式),得到list

遍历str,字符串逐位和list对比,如果第i位不一样,那么此时需要交换的位置就是,i和list.get(i)中存放的索引位置。

输出交换位置后的字符串即可

题解

java 复制代码
package hwod;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class TheMinStr {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(theMinStr(str));
    }

    private static String theMinStr(String str) {
        List<int[]> list = new ArrayList<>();
        for (int i = 0; i < str.length(); i++) {
            list.add(new int[]{str.charAt(i), i});
        }
        list.sort((o1, o2) -> {
            if(o1[0]!=o2[0]) return o1[0] - o2[0];
            return o1[1] - o2[1];
        });
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) != list.get(i)[0]) {
                return swap(str, i, list.get(i)[1]);
            }
        }
        return str;
    }

    private static String swap(String str, int i, int j) {
        char[] chars = str.toCharArray();
        char t = chars[i];
        chars[i] = chars[j];
        chars[j] = t;
        return String.valueOf(chars);
    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

相关推荐
guo_wen_qiang3 分钟前
云服务器nacos搭建-集群&持久化
java·运维·服务器
江江爱编程34 分钟前
java零基础保姆级教学01
java·开发语言
96245635 分钟前
餐饮 SaaS 优惠券系统架构演进(三):优惠计算引擎——商品级计价、冲突策略与优惠分摊
java·数据库·spring boot
vx_Biye_Design37 分钟前
expressDeepSeek社团咨询助手的学生社团管理系统60746-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·课程设计·express
vx_Biye_Design1 小时前
springboot宠物领养与救助平台64334-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·课程设计·宠物
泡茶喝茶写代码1 小时前
A股量化数据工程:从 REST 接口到策略信号(第 5 篇):板块成分股映射与对齐
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据接口
vx_Biye_Design1 小时前
django就业信息推荐系统61953-计算机课程设计、毕业设计
java·vue.js·spring boot·python·架构·django·课程设计
知守观1 小时前
HTML 转 PDF 方案实战:iTextPDF 与 wkhtmltopdf 踩坑复盘,附 Flying Saucer / openhtmltopdf 选型对比
java·后端
2601_962071571 小时前
类变量和全局变量的隔离性有什么区别?
java·开发语言·jvm
海绵宝宝转agent1 小时前
LeetCode100 LRU缓存思路讲解
java·开发语言·缓存