赞
踩
题目描述
给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。
变换规则:交换字符串中任意两个不同位置的字符。
输入描述
一串小写字母组成的字符串s
输出描述
按照要求进行变换得到的最小字符串。
- s是都是小写字符组成
- 1 ≤ s.length ≤ 1000
输入 | abcdef |
输出 | abcdef |
说明 | abcdef已经是最小字符串,不需要交换。 |
输入 | bcdefa |
输出 | acdefb |
说明 | a和b进行位置交换,可以得到最小字符串 |
源码和解析
解析:
先排序,找出排序后顺序交换位置距离最远的那个进行交换即可
示例代码:
import java.util.Arrays; import java.util.Scanner; /** * 一次变换要想得到最小 那么交换时,肯定是将最小的字符往前提 如果那个最小字符有多个,则肯定是提取最后一个 * 比如 bacada===> aacadb=> 最后一个a和首字符交换 * 解决思路 先排序 查找从前往后字符串变化的地方 */ public class T41 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String rawWord=sc.nextLine(); char[] cArr=rawWord.toCharArray(); Arrays.sort(cArr); boolean flag=false; for(int i=0;i<cArr.length;i++) { if(cArr[i]!=rawWord.charAt(i)) { char obj=cArr[i];//要替换的目标字符 int lastIndex=rawWord.lastIndexOf(obj); //要替换的目标字符 最后的索引 StringBuilder sb=new StringBuilder(rawWord); char rawObj=sb.charAt(i);//目标字符提前的索引对应字符 目标字符要和谁换 sb.setCharAt(i, obj); sb.setCharAt(lastIndex, rawObj); System.out.println(sb.toString()); flag=true; break; } } if(flag==false){ System.out.println(rawWord); } } }
代码运行示意图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。