给定一个字符串,对其进行排序
转载请注明出处!
背景:这是我一个朋友遇到的面试题。给定String str = "a2scdfa4";
对每一个字符排序后重组成新的字符串。
下面给出几个实现方式:
第一种:较为简单常规。基本都应该想得到。
思路:将字符串转成char[ ]数组,然后对数组进行排序,排序算法可以任选。
实现:排序算法采用冒泡排序
public static String sort(String str){ //利用toCharArray可将字符串转换为char型的数组 char[] s1 = str.toCharArray(); for(int i=0;i<s1.length;i++){ for(int j=0;j<i;j++){ if(s1[i]<s1[j]){ char temp = s1[i]; s1[i] = s1[j]; s1[j] = temp; } } } //再次将字符数组转换为字符串,也可以直接利用String.valueOf(s1)转换 String st = new String(s1); return st; }
第二种:更加简洁
思路:将字符串转成字符数组,然后使用Arrays.sort(char [ ] )方法。
public static String sort(String str){ //利用toCharArray可将字符串转换为char型的数组 char[] charArray = str.toCharArray(); char[] c = Arrays.sort(charArray); //再次将字符数组转换为字符串,也可以直接利用String.valueOf(s1)转换 String st = new String(c); return st; }
第三种:
采用集合+迭代器
public static String stringSort(String a) { char[] aa = a.toCharArray(); StringBuffer sb = new StringBuffer(); Map map = new TreeMap(); for (int i = 0; i < aa.length; i++) { String key = aa[i] + ""; String value = aa[i] + ""; if (map.containsKey(key)) { key += 1; } map.put(key, value); } Set set = map.keySet(); Iterator<String> it = set.iterator(); while (it.hasNext()) { String str = it.next(); sb.append(map.get(str)); } return sb.toString(); }
那么说一下这三种的区别。 首先说,优秀的代码一定是逻辑越简洁越好,能简单就别复杂化。当然有其他因素除外。
这三种方式区别在于两点:一是效率 , 而是逻辑。
方式一:双重循环+排序算法。效果能达到,但是效率低下。
方式二:逻辑极简+优化后的快速排序算法。简洁,效率也不错。并且是自带的工具类
方式三:逻辑较为复杂,但是采用迭代器遍历,效率较高。
当然,那种方式好,就看你们怎么取舍和理解了。