给定字符串正整数,进行排序并返回排序后字符串

前言:笔者曾经面试时遇到过这样一道面试题,给定一个字符串,字符串内后很多正整数,要求对这些正整数进行从小打到排序,并返回排序后的字符串,笔者还是太年轻了,一上来看的这题当时就是懵逼的,卧槽这谁操作过,再三审题后,笔者开始一顿操作, 结果没有在规定时间内做出来,然后挂了,想想挺后悔的,其实也很简单,只是笔者当时很久没敲代码,脑子有些生锈,回到家也很沮丧,今天突然想起来,我当时把题目拍照拍下来了,就拿出来又写了一遍,分享出来给学习java的小伙伴们看看,写的不好,还请指正,如果你有更好的建议希望留言评论互相学习下,那么接下来上题目。

题:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

开始答题:

上代码:

package com.java.string;

/**
 * 〈一句话功能简述〉<br>
 * 〈面试题字符串排序〉
 *
 * @author lulu
 * @create 2019/5/6
 * @since 1.0.0
 */
public class StringDemo {
    /*
     * 排序要求:
     *  按照每个正整数的后三位数字组成的整数进行从小到大排序
     *      1) 如果不足三位,则按照实际位数组成的整数进行比较
     *      2) 如果相等或者重复,则按照输入字符串中的原始顺序排序
     *      3) 不可使用语言自身排序方法和有相似效果的方式
     *
     *  说明(以下内容考生无需检查,调用者保证)
     *      1) 字符串内正整数之间以单个空格分隔,字符串首尾没有空格
     *      2) 正整数格式为十进制,大小:1~1,000,000,正整数的数字非零开始
     *      3) 内置方法只能使用字符串截取和获取
     *  实例:
     *  如字符串内容:
     *      1223 16 1016 1016 85965 15625 1568 22 3232 14753 1565 9856
     *   按照规定排序后
     *      16 1016 1016 22 1223 3232 1565 1568 15625 14753 9856 85965
     * */

    public static void main(String[] args) {
        // 待排序字符串
        String string = "1223 16 1016 1016 85965 15625 1568 22 3232 14753 1565 9856";
        // 要求排序后结果
        String string2 = "16 1016 1016 22 1223 3232 1565 1568 15625 14753 9856 85965";
        String regex = " ";
        System.out.println("原始字符串:"+string);
        String result = sortString(string, regex);
        System.out.println("排序后结果:" + result);
        System.err.println("是否符合排序后要求:"+(result.equals(string2)?"符合":"不符合"));
    }

    /**
     * 字符串自定义排序方法i
     *
     * @param string 待排序字符串
     * @param regex  分割标识<例如空格,逗号等>
     * @return java.lang.String 返回排序后字符串
     * @author ZhaoLuLu
     * @creed: Talk is cheap,show me the code
     * @date 2019/5/6 13:54
     */
    public static String sortString(String string, String regex) {
        if (string.length() < 2) return string;
        // 给定截取条件分割字符串为字符数组
        String[] strings = string.split(regex);
        // 创建等同长度整数型数组
        int[] ints = new int[strings.length];
        // 临时变量
        int temp;
        // 采用冒泡排序
        for (int i = 0; i < strings.length; i++) ints[i] = Integer.parseInt(strings[i]);
        for (int j = 0; j < ints.length; j++)
            for (int k = 0; k < ints.length - 1 - j; k++)
                // 取余后三位正整数(满足题目要求,不足三位按照实际位数进行比较)
                if ((ints[k + 1] % 1000) < ints[k] % 1000) {
                    temp = ints[k + 1];
                    ints[k + 1] = ints[k];
                    ints[k] = temp;
                }

        // 返回排序后字符串
        StringBuilder stringBuilder = new StringBuilder();
        for (int num : ints) stringBuilder.append(num + regex);
        return stringBuilder.toString().trim();
    }
}

 

笔者目前也是菜鸟级的程序猿,期待大佬带

posted @ 2019-05-06 14:52  huiyi0521  阅读(801)  评论(1编辑  收藏  举报