给定一个字符串,对其进行排序

版权声明:请支持原创,转载注明出处。 https://blog.csdn.net/JavaBuilt/article/details/79974081

给定一个字符串,对其进行排序

转载请注明出处!

     背景:这是我一个朋友遇到的面试题给定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();
    }

那么说一下这三种的区别。 首先说,优秀的代码一定是逻辑越简洁越好,能简单就别复杂化。当然有其他因素除外。

这三种方式区别在于两点:一是效率 ,  而是逻辑。

方式一:双重循环+排序算法。效果能达到,但是效率低下。

方式二:逻辑极简+优化后的快速排序算法。简洁,效率也不错。并且是自带的工具类

方式三:逻辑较为复杂,但是采用迭代器遍历,效率较高。

当然,那种方式好,就看你们怎么取舍和理解了。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页