题解 | #字符串排序#

字符串排序

http://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

解题思路:
把输入的字符串分成两部分,第一部分是包含字母的列表,对这部分进行排序;( 题目第一个要求sort排序,第二个要求保留大小写先后顺序用LinkedList)
List<Character> charList = new LinkedList<>();
第二部分记录非字母的下标
List<Integer> otherInexs = new ArrayList<>();
字母列表排序完成后,合并还原字符串。(第三个要求非字母要还原到原来的位置,记录index,合并时还原回去)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()) {
            String s = sc.nextLine();
            System.out.println(sortString(s));
        }

    }

    private static String sortString(String s) {
        List<Character> charList = new LinkedList<>();
        char[] charArr = s.toCharArray();
        int len = charArr.length;
        List<Integer> otherInexs = new ArrayList<>(); //非字母的下标,合并还原时要用
        for (int i = 0; i < len; i++) {
            if (Character.isLetter(charArr[i])) {
                charList.add(charArr[i]);
            } else {
                otherInexs.add(i);
            }
        }
        charList.sort(new Comparator<Character>() {//也可以用Collections.sort
            @Override
            public int compare(Character o1, Character o2) {
                return Character.toLowerCase(o1) - Character.toLowerCase(o2);
            }
        });

        StringBuffer sb = new StringBuffer();
//        char[] merge = new char[len]; //排序后重新合并
        int charIndex = 0;
        for (int i = 0; i < len; i++) {
            if (otherInexs.contains(i)) {
//                merge[i] = charArr[i];
                sb.append(charArr[i]);
            } else {
//                merge[i] = charList.get(charIndex);
                sb.append(charList.get(charIndex));
                charIndex ++;
            }
        }
        return sb.toString();
    }
}


全部评论

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务