zoukankan      html  css  js  c++  java
  • 给定字符串正整数,进行排序并返回排序后字符串

    前言:笔者曾经面试时遇到过这样一道面试题,给定一个字符串,字符串内后很多正整数,要求对这些正整数进行从小打到排序,并返回排序后的字符串,笔者还是太年轻了,一上来看的这题当时就是懵逼的,卧槽这谁操作过,再三审题后,笔者开始一顿操作, 结果没有在规定时间内做出来,然后挂了,想想挺后悔的,其实也很简单,只是笔者当时很久没敲代码,脑子有些生锈,回到家也很沮丧,今天突然想起来,我当时把题目拍照拍下来了,就拿出来又写了一遍,分享出来给学习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();
        }
    }

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

  • 相关阅读:
    Java openrasp学习记录(一)
    Java ASM3学习(3)
    Java ASM3学习(2)
    Java Instrumentation插桩技术学习
    Java ASM3学习(1)
    从JDK源码学习HashSet和HashTable
    从JDK源码学习HashMap
    从JDK源码学习ArrayList
    Java XXE漏洞典型场景分析
    CVE-2020-7961 Liferay Portal 复现分析
  • 原文地址:https://www.cnblogs.com/huiyi0521/p/10819580.html
Copyright © 2011-2022 走看看