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