华为OD机试算法- 5键键盘

题目描述

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

a键在屏幕上输出一个字母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();
                        clipboard.addAll(screen);
                        screen.clear();
                        isSelect = false;
                    }
                    break;
                case 4: 
                    if (isSelect) screen.clear();
                    screen.addAll(clipboard);
                    isSelect = false;
                    break;
                case 5: 
                    if (!screen.isEmpty()) isSelect = true;
                    break;
            }
        }

        return screen.size();
    }
}

JS算法源码

const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (input) => {
  const directives = input.split(" ");

  console.log(getFinalLetterCount(directives));
});

function getFinalLetterCount(directives) {
  const screen = [];
  const clipboard = [];
  let isSelecting = false;

  directives.forEach((directive) => {
    switch (directive) {
      case "1": 
        if (isSelecting) screen.length = 0;
        screen.push("a");
        isSelecting = false;
        break;
      case "2": 
        if (isSelecting) {
          clipboard.length = 0;
          clipboard.push(...screen);
        }
        break;
      case "3":
        if (isSelecting) {
          clipboard.length = 0;
          clipboard.push(...screen);
          screen.length = 0;
          isSelecting = false;
        }
        break;
      case "4": 
        if (isSelecting) screen.length = 0;
        screen.push(...clipboard);
        isSelecting = false;
        break;
      case "5": 
        if (screen.length !== 0) isSelecting = true;
        break;
    }
  });

  return screen.length;
}

Python算法源码

commands = list(map(int, input().split()))


def getResult():
    screen = []
    clip = []
    isSelect = False

    for command in commands:
        if command == 1:
            if isSelect:
                screen.clear()
            screen.append("a")
            isSelect = False
        elif command == 2:
            if isSelect:
                clip.clear()
                clip.extend(screen)
        elif command == 3:
            if isSelect:
                clip.clear()
                clip.extend(screen)
                screen.clear()
                isSelect = False
        elif command == 4:
            if isSelect:
                screen.clear()
            screen.extend(clip)
            isSelect = False
        elif command == 5:
            if len(screen) != 0:
                isSelect = True

    return len(screen)


print(getResult())

#华为OD机试算法题库#
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务