■ 题目描述
【字符串变换最小字符串】
给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。
变换规则:交换字符串中任意两个不同位置的字符。
输入描述
一串小写字母组成的字符串s
输出描述
按照要求进行变换得到的最小字符串。
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
abcdef
输出
abcdef
说明
abcdef已经是最小字符串,不需要交换。
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
bcdefa
输出
acdefb
说明
a和b进行位置交换,可以得到最小字符串。
备注
s是都是小写字符组成
1<=s.length<=1000
Java代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
if (str == null || str.isEmpty()) {
return;
}
char[] charArray = str.toCharArray();
int minIndex = 0;
int minCharValue = Integer.valueOf(charArray[0]);
for (int i = 0; i < charArray.length; i++) {
int charValue = Integer.valueOf(charArray[i]);
if (charValue <= minCharValue) {
minCharValue = charValue;
minIndex = i;
}
}
if (minIndex == 0) {
System.out.println(str);
} else {
char temp = charArray[0];
charArray[0] = charArray[minIndex];
charArray[minIndex] = temp;
System.out.println(String.valueOf(charArray));
}
}
}
Java代码实现二:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
char[] chars = input.toCharArray();
Arrays.sort(chars);
String str = input;
for (int i = 0; i < input.length(); i++) {
if (chars[i] == input.charAt(i)) {
continue;
} else {
char aChar = chars[i];
int i1 = input.lastIndexOf(String.valueOf(aChar));
str = input.substring(0, i) + aChar + input.substring(i + 1, i1) + input.charAt(i) + input.substring(i1 + 1);
break;
}
}
System.out.println(str);
}
}
Java代码实现三:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int len = s.length();
List<Character> listBySort = new ArrayList<>();
char[] chars = new char[len];
for (int i = 0; i < len; i++) {
listBySort.add(s.charAt(i));
chars[i] = s.charAt(i);
}
Collections.sort(listBySort);
char change = ' ';
int minIndex = 0;
int changeIndex = 0;
for (int i = 0; i < len; i++) {
if (listBySort.get(i) < s.charAt(i)) {
change = listBySort.get(i);
changeIndex = i;
break;
}
}
if (change != ' ') {
for (int i = len - 1; i >= 0; i--) {
if (s.charAt(i) == change) {
minIndex = i;
break;
}
}
chars[minIndex] = chars[changeIndex];
chars[changeIndex] = change;
}
System.out.println(String.valueOf(chars));
}
}