活动地址:CSDN21天学习挑战赛
题目描述:
给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。 变换规则:交换字符串中任意两个不同位置的字符。
输入描述:
一串小写字母组成的字符串s
输出描述:
按照要求进行变换得到的最小字符串
示例
输入:
abcdef 输出:
abcdef 说明:
abcdef已经是最小字符串,不需要交换 输入:
bcdefa 输出:
acdefb 说明:
a和b进行位置交换,可以得到最小字符串
备注:
- s是都是小写字符组成
- 1<=s.length<=1000
图解
代码实现
import java.util.Arrays;
import java.util.Scanner;
public class Day12MinStr {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
//将字符串以数组的的方式进行存储
char[] chars = s.toCharArray();
//排序char数组
char[] sortChars = s.toCharArray();
Arrays.sort(sortChars);
//交换字符
char c = ' ';
//交换字符下标
int cIndex = 0;
//最小字符下标
int minIndex = 0;
//遍历找出需要交换的字符以及交换字符下标
for (int i = 0; i < s.length(); i++) {
if(sortChars[i]<s.charAt(i)){
c = sortChars[i];
cIndex = i;
break;
}
}
//如果遍历完c存在,则倒序遍历找出原字符数组最后一个要交换的字符
if (c!=' '){
for (int i = s.length()-1; i >=0 ; i--) {
if(s.charAt(i)==c){
minIndex = i;
break;
}
}
chars[minIndex] = chars[cIndex];
chars[cIndex] = c;
}
//输出结果
System.out.println(String.copyValueOf(chars));
}
}