hewhys的博客

编程初学者

华为实习生面试题-字符串输出调整 Java实现

华为实习生面试题-字符串输出调整 Java实现

师兄参加了华为的实习生招聘,我也蹭了一下热闹。



题目描述

给你一个原始字符串,根据该字符串内每个字符出现的次数,按照ASCII码递增顺序重新调整输出。

举例!假设原始字符串为:

eeefgghhh

则每种字符出现的次数分别是:

序号 字符串 次数
(1) eee 3次
(2) f 1次
(3) gg 2次
(4) hhh 3次

重排输出后的字符串如下:

efghegheh

编写程序,实现上诉功能。
【温馨提示】
(1).原始字符串中仅可能出现“数字”和“字母”
(2).请注意区分字母大小写

输入描述

eeefgghhh

输出描述

efghegheh

题目分析

题目的要求其实十分简单,一是按ASCII码递增排序,二是按字符出现次数重排。

第一个需求十分简单,我这里就直接用Arrays的sort()方法来做了。当然自己写一个排序也不是什么大问题,就是用char的值进行比较而已。

第二个需求也不难,就是不好读懂。按测试用例来图解一遍吧。
输入->输出
如果把输入的字符串放到数组中,左侧红色框相加就是输入eefgghhh(已排序过的输入),左侧蓝色框相加就是输出efgheghh。这么一看就比较直观了,大概就是做一个转置运算,具体怎么做就是各显神通了。

题目解答

Java实现


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 变量定义
        List<String> rec = new ArrayList<String>();
        String c2 = "";
        int count = 0;
        String output = "";

        // 打开输入流
        Scanner scanner = new Scanner(System.in);

        // 按ASCII码排序
        char[] ch = scanner.next().toCharArray();
        Arrays.sort(ch);
        String in = new String(ch);

        // 对字符串中的字符逐个处理
        for (int i = 0; i < in.length(); i++) {
            // 获取当前位置字符
            String c1 = in.substring(i, i + 1);
            // 与上一个字符对比
            if (c1.equals(c2)) {
                // 如果和上一个字符相同,向下一行插入
                count++;
                if (rec.size() < count + 1) {
                    // 该字符各个多于现有行数,创建新行
                    rec.add(c1);
                } else {
                    // 该字符各个不多于现有行数,添加到指定行
                    rec.set(count, rec.get(count) + c1);
                }
            } else {
                // 如果和上一个字符不同,放到第一行
                count = 0;
                if (rec.size() == 0) {
                    // 没有第一行时,创建第一行
                    rec.add(c1);
                } else {
                    // 有第一行时,添加到第一行
                    rec.set(count, rec.get(count) + c1);
                }
            }
            // 把本次的字符保存到c2中,用于下一次判断
            c2 = c1;
        }

        // 把各行叠加,获得输出
        for (String out : rec) {
            output += out;
        }

        // 去除多余空格并输出
        System.out.println(output.replaceAll(" ", "").trim());
        // 关闭输入流
        scanner.close();
    }
}

测试用例

输入 输出
eeefgghhh efghegheh
fhhheegg efgheghh
AABBBCC12367a 12367ABCaABCB
阅读更多
文章标签: Java 面试题
个人分类: Java
上一篇开发一个控制硬件的安卓app(2)——指令生成与状态解析
下一篇设计模式概述——《C#设计模式读书笔记》
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭