题解 | #字符串排序#

字符串排序

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

import java.util.Scanner;
import java.util.LinkedHashMap;
import java.util.ArrayList;
import java.util.Set;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String input = in.nextLine();

            // LinkedHashMap用来存放非英文字母和它的初始位置
            LinkedHashMap<Integer, Character> map = new LinkedHashMap<Integer, Character>();
            // ArrayList用来存放英文字母,使用类冒泡排序进行排序(认为字母大小写相等)
            ArrayList<Character> list = new ArrayList<Character>();

            for (int i = 0; i < input.length(); i++) {
                char tempCh = input.charAt(i);
                if ((tempCh >= 'A' && tempCh <= 'Z') || (tempCh >= 'a' && tempCh <= 'z')) {
                    list.add(Character.valueOf(tempCh));
                } else {
                    map.put(Integer.valueOf(i), Character.valueOf(tempCh));
                }
            }

            // System.out.println(list);

            //冒泡排序
            int length = list.size();
            for (int i = 0; i < length - 1; i++) {

                for (int j = 0; j < length - 1 - i; j++) {
                    Character tempC = null;
                    if (compare(list.get(j), list.get(j + 1)) > 0) {
                        tempC = list.get(j);
                        list.set(j, list.get(j + 1));
                        list.set(j + 1, tempC);
                    }
                }
            }

            // System.out.println(list);
            // System.out.println(map);

            Set<Integer> TS = map.keySet();
            for (Integer i : TS) {
                int n = i.intValue();
                list.add(n, map.get(i));
            }
            //  System.out.println(list);
            for (int i = 0; i < list.size(); i++) {
               System.out.print(list.get(i));
                }

        }
    }

    // 比较两个字母大小,c1>c2,返回正数,c1=c2,返回0,c1<c2,返回负数
    //规定  A=a  A<b  B>a a<C
    public static int compare(Character c1, Character c2) {
        int result;
        char ch1 = c1.charValue();
        char ch2 = c2.charValue();

        //将小写字符转换为大写字符
        if (ch1 >= 'a' && ch1 <= 'z') {
            ch1 = (char)(ch1 - 32);
        }
        if (ch2 >= 'a' && ch2 <= 'z') {
            ch2 = (char)(ch2 - 32);
        }

        return ch1 - ch2;
    }
}

全部评论

相关推荐

03-26 13:44
南华大学 Java
在看面经的花生米很野蛮:这种情况下你当然要回答,你也是吗!!!!我超喜欢他的XXXXX
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务