华为机试练习———五键键盘

189 阅读1分钟

题目

有一个特殊的五键键盘

上面有A、Ctrl-C、Ctrl-X、Ctrl-V、Ctrl-A

A键在屏幕上输出一个字母A

Ctrl-C将当前所选的字母复制到剪贴板

Ctrl-X将当前选择的字母复制到剪贴板并清空所选择的字母

Ctrl-V将当前剪贴板的字母输出到屏幕

Ctrl-A选择当前屏幕中所有字母

注意

1.剪贴板初始为空

2.新的内容复制到剪贴板会覆盖原有内容

3.当屏幕中没有字母时,Ctrl-A无效

4.当没有选择字母时Ctrl-C、Ctrl-X无效

5.当有字母被选择时A和Ctrl-V这两个输出功能的键,会先清空所选的字母再进行输出

要求

给定一系列键盘输入,输出最终屏幕上字母的数量。

输入描述: 输入为一行,为简化解析用数字12345分别代替A、Ctrl-C、Ctrl-X、Ctrl-V、Ctrl-A,输入的数字用空格分割

输出描述: 输出一个数字为屏幕上字母的总数量

代码

public int solution(String s){
    String[] strings = s.split(" ");
    StringBuffer value = new StringBuffer();//存放字符

    StringBuffer clipboard = new StringBuffer(); //剪贴板上的内容

    boolean flag = false; //是否全选

    for (String string : strings) {
        switch (string){
            case "1":
                if (flag){
                    value = new StringBuffer();
                    value.append(string);
                }else {
                    value.append(string);
                }
                break;
            case "2":
                if (flag){
                    clipboard.append(value.toString());
                }
                break;
            case "3":
                if (flag){
                    clipboard.append(value.toString());
                    value = new StringBuffer();
                    flag = false;
                }
                break;
            case "4":
                if (flag){
                    value = new StringBuffer();
                    value.append(clipboard.toString());
                    flag = false;
                }else {
                    value.append(clipboard.toString());
                }
                break;
            case "5":
                if (value.length()!=0)
                    flag = true;
                break;
        }
    }
    return value.length();
}

结果展示

image.png

ps:该代码未在华为机试平台运行,仅供参考!!!