华为OD机试真题 - 5键键盘 (D卷,100分)

题目描述

有一个特殊的5键键盘,上面有a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键。

a键在屏幕上输出一个字母a;

ctrl-c将当前选择的字母复制到剪贴板;

ctrl-x将当前选择的字母复制到剪贴板,并清空选择的字母;

ctrl-v将当前剪贴板里的字母输出到屏幕;

ctrl-a选择当前屏幕上的所有字母。

注意:

  1. 剪贴板初始为空,新的内容被复制到剪贴板时会覆盖原来的内容
  2. 当屏幕上没有字母时,ctrl-a无效
  3. 当没有选择字母时,ctrl-c和ctrl-x无效
  4. 当有字母被选择时,a和ctrl-v这两个有输出功能的键会先清空选择的字母,再进行输出

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

输入描述

  • 输入为一行,为简化解析,用数字1 2 3 4 5代表a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键的输入,数字用空格分隔。

输出描述

  • 输出一个数字,为最终屏幕上字母的数量。

用例

输出

3

说明

连续键入3个a,故屏幕上字母的长度为3。

输出

2

说明

输入两个a后ctrl-a选择这两个a,再输入a时选择的两个a先被清空,所以此时屏幕只有一个a,

题目解析

逻辑题,主要考察多情况的处理。

题目中没有准确说明  选择状态 何时被解除,比如我ctrl-a全选所有字母时,然后ctrl-c将选择的字母复制到剪贴板,那么此时屏幕中字母的选中状态是保留还是清除呢?

我理解ctrl-x剪切走屏幕内容,没有字母了,自然就没有选中状态了。另外,a、ctrl-v输入时,如果有字母选中状态,则输入时会覆盖选中内容,那么选中状态就没了。

Java算法源码

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

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] commands = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        System.out.println(getResult(commands));
    }

    public static int getResult(int[] commands) {
        ArrayList<String> screen = new ArrayList<>();
        ArrayList<String> clipboard = new ArrayList<>();
        boolean isSelect = false;

        for (int command : commands) {
            switch (command) {
                case 1:
                    if (isSelect) screen.clear();
                    screen.add("a");
                    isSelect = false;
                    break;
                case 2: 
                    if (isSelect) {
                        clipboard.clear();
                        clipboard.addAll(screen);
                    }
                    break;
                case 3: 
                    if (isSelect) {
                        clipboard.clear();
 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试题库D卷 文章被收录于专栏

2024年5-11月份考的D卷,不用再看AB卷,CD卷题目一样。多种语言解法,欢迎提供更好的解法。

全部评论
不错,支持一下
1
送花
回复 分享
发布于 06-20 12:08 江西
nice
1
送花
回复 分享
发布于 06-20 12:18 北京
秋招专场
校招火热招聘中
官网直投
非常棒,很好
1
送花
回复 分享
发布于 06-20 12:22 湖北
来支持!!!
1
送花
回复 分享
发布于 06-20 14:41 上海
非常棒
点赞
送花
回复 分享
发布于 06-20 12:09 甘肃
思路可以的
点赞
送花
回复 分享
发布于 06-20 12:10 广东
人生苦短,拒绝内卷
点赞
送花
回复 分享
发布于 06-20 12:10 广东
加油加油😊
点赞
送花
回复 分享
发布于 06-20 12:14 河北
学到了,干货满满
点赞
送花
回复 分享
发布于 06-20 12:29 北京
小老弟,加油
点赞
送花
回复 分享
发布于 06-20 13:35 湖南
思路没毛病
点赞
送花
回复 分享
发布于 06-20 15:45 河南
机试350分,十分感谢
点赞
送花
回复 分享
发布于 06-20 16:19 广东
思路清晰完整,代码逻辑强
点赞
送花
回复 分享
发布于 06-20 18:41 北京
感谢支持
点赞
送花
回复 分享
发布于 06-21 16:45 广东

相关推荐

2 2 评论
分享
牛客网
牛客企业服务