字符串变换最小字符串 - 华为OD统一考试(C卷)
OD统一考试(C卷)
分值: 100分
题解: Java / Python / C++
题目描述
给定一个字符串s, 最多只能进行一次变换, 返回变换后能得到的最小字符串(按照字典序进行比较)。
变换规则: 交换字符串中任意两个不同位置的字符。
输入描述
一串小写字母组成的字符串s。
输出描述
按照要求进行变换得到的最小字符串。
备注
-
s是都是小写字符组成
-
1<=s.length<=1000
示例1
输入:
abcdef
输出:
abcdef
说明:abcdef已经是最小字符串,不需要交换
示例2
输入:
bcdefa
输出:
acdefb
说明:a和b进行位置交换,可以得到最小字符串
题解
贪心的题目
字典序最小,字符串越前面优先级越大,因此从左往右遍历字符串,遍历的同时右侧寻找可以交换的位置(字典序更小)。
如果找到了可以交换的位置则交换字符然后返回结果即可。
Java
import java.util.Scanner;
/**
* @author code5bug
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
char[] cs = s.toCharArray();
int len = cs.length;
for (int left = 0; left < len; left++) {
// 右侧寻找小于 cs[left] 的最小字符,如果有多个则取最右边的一个
int idx = left;
for (int right = left + 1; right < len; right++) {
if (cs[right] <= cs[idx]) {
idx = right;
}
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
华为OD机试题库题解2024 文章被收录于专栏
华为OD机考(CDE卷)题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。