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

原创 2018年04月17日 16:07:25

华为实习生面试题-字符串输出调整 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

2017年华为实习生面经

华为2017年实习生面试经验
  • u013760355
  • u013760355
  • 2017-04-08 16:53:23
  • 2999

2016年华为 软开实习生招聘面经(机试面试)

华为在厦门的实习生招聘来的很晚,其他地区3,4月份就开始了。不过华为效率很高,一天机试,一天面试解决战斗。这次的实习生招聘和以往有些不同,现在分享下我的机试面试经历,希望对后来人有些帮助~2015年6...
  • zhoubin1992
  • zhoubin1992
  • 2015-06-19 16:09:37
  • 6260

华为软件开发实习生一面经验(java方向)

这两天忙活这个面试的事真是累得不行不行的,华为原本的计划应该上一天就能搞定的,因为人多,所以就二面就推迟到明天。明天还得往中心跑,也是心累。。          好了,废话不多说,谈谈一面(技术面)的...
  • lechashao
  • lechashao
  • 2016-04-18 23:13:01
  • 2475

华为笔试题:N进制求和计算问题

我是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,自从入职培训自我介绍后,大家就称我为“二师弟”,我喜欢看科幻小说,也喜欢做梦,有一次梦到外星球,发现外星人使用的并非10进制/16...
  • xiaodeguang
  • xiaodeguang
  • 2016-08-27 09:09:43
  • 1404

2017年3月17日华为内推上机考试

刚刚考完上机来写一波自己的解答:第一题import java.util.Scanner;/** * Created by Xavier on 2017/3/15. * 写出一个程序,输入一个字符串...
  • xavierqwb
  • xavierqwb
  • 2017-03-17 21:15:11
  • 2074

2017年华为实习生招聘笔试题1

题目:输入两个整数,输入的整数的范围在1-70000之间,否则返回-1; 将输入的整数逆序,例如输入123,逆序为321; 将两个输入的整数逆序之后,相加输出。 代码如下: #include ...
  • Leo_Luo1
  • Leo_Luo1
  • 2017-03-24 21:27:49
  • 1027

华为 2017 实习生招聘笔试题

最近几年HUAWEI的利润日胜一日,所以雇员价格也是水涨船高。本次网上编程时间是2017年3月17日晚上7点,共3个小编程题 题目一太简单了~~ 题目二:集福卡,输入是01011 这样的字符串,代...
  • vonmax007
  • vonmax007
  • 2017-03-17 20:55:34
  • 10794

华为2018届校招勇敢星实习生招聘笔试+面试经历

写在前面  之前一直在忙期末,最近才歇了下来,来总结一下之前参加华为2018届勇敢星实习生笔试+面试(研发类)并顺利拿到offer的经历。   我是在微信上投的Android研发实习生岗,很快就收到...
  • Jacky_chenjp
  • Jacky_chenjp
  • 2017-06-18 16:53:38
  • 12975

百度华为实习生面试经历

百度华为实习生面试经历前天面完百度,昨天做完滴滴的笔试题后,找暑期实习的过程实质上已经算是结束了。只剩下等百度的结果了。 以下内容纯凭回忆:  百度:(5月6号下午3点) 1面 (40 min ...
  • NachtZ
  • NachtZ
  • 2017-05-28 08:13:38
  • 1145

2017华为笔试题3

一、拼音与英文互相转换的函数1.1 题目编写一个拼音与英文互相转换的函数,如果输入的电话号码是英文单词,输出对应的电话号码的中文拼音。如果输入的电话号码是中文拼音,输出对应的电话号码的英文单词。...
  • u014800380
  • u014800380
  • 2017-08-30 21:12:22
  • 1830
收藏助手
不良信息举报
您举报文章:华为实习生面试题-字符串输出调整 Java实现
举报原因:
原因补充:

(最多只允许输入30个字)