活动地址:CSDN21天学习挑战赛
只要你想象得到,你就能做到;只要你能梦见,你就能实现。
…
学习日记
**
1,题目
给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。
变换规则:交换字符串中任意两个不同位置的字符。
2,输入
一串小写字母
3,输出
按要求转换的最小字符串
4,示例
输入:abcdef
输出:abcdef
说明:abcdef已经是最小字符串,不需要交换
输入:bcdefa
输出:acdefb
说明:a和b进行位置交换,可以得到最小字符串
5,学习知识点
仔细观察题目
6,学习遇到的问题
数组中两个字符替换,string没有合适的api需要转换为StringBuffer()
7,实操
@Test
public void findMinStr() {
String sc = "bcdefa";
char[] chars = sc.toCharArray();
Arrays.sort(chars);
for (int i = 0; i < chars.length; i++) {
if (sc.charAt(i) != chars[i]) {
//TODO 交换数据
change(sc, sc.charAt(i), chars[i]);
return;
}
}
System.out.println(sc);
}
/**
* 交换str中的 s1 和 s2
*
* @param str 需要转换的数组
* @param s1
* @param s2
*/
public void change(String str, char s1, char s2) {
int index1 = str.indexOf(s1);
int index2 = str.indexOf(s2);
StringBuffer sb = new StringBuffer(str);
sb.replace(index1, index1 + 1, String.valueOf(s2));
sb.replace(index2, index2 + 1, String.valueOf(s1));
System.out.println(sb);
}
…