【华为机试】2023年真题B卷(python)-代码编辑器

一、题目

题目描述:

某公司为了更高效的编写代码,邀请你开发一款代码编辑器程序。 
程序的输入为已有的代码文本和指令序列,程序需输出编辑后的最终文本。
指针初始位置位于文本的开头。支持的指令(X为大于等于0的整数,word 为无空格的字符串):
FORWARD X 指针向前(右)移动X,如果指针移动位置超过了文本末尾,则将指针移动到文本未尾 
BACKWARD X 指针向后(左)移动X,如果指针移动位置超过了文本开头,则将指针移动到文本开头 
SEARCH-FORWARD word 从指针当前位置向前查找 word 并将指针移动到word的起始位置,如果未找到则保持不变 
SEARCH-BACKWARD word 在文本中向后查找 word 并将指针移动到word的起始位置,如果未找到则保持不变INSERT word 在指针当前位置前插入word,并将指针移动到word的结尾 
REPLACE word 在指针当前位置替换并插入字符(删除原有字符,并增加新的字符) 
DELETE X 在指针位置删除X个字符

二、输入输出

输入描述: 
输入的第一行为命令列表的长度K
输入的第二行为文件中的原始文本接下来的K行,每行为一个指令
输出描述: 
编辑后的最终结果 

补充说明: 
文本最长长度不超过 256K

三、示例

示例1
输入: 
1
ello
INSERT h 
输出: 
hello 
说明:在文本开头插入

示例2 
输入:

hllo 
FORWARD 1 
INSERT e
输出: 
hello 
说明: 在文本的第一个位置插入
示例3 
输入:

hell 
FORWARD 1000 
INSERT o 
输出: 
hello 
说明: 在文本的结尾插入

示例4 
输入:

hello 
REPLACE HELLO 
输出: 
HELLO 
说明:替换
示例5 
输入:
1
hello
REPLACE HELLO WORLD
输出: 
HELLO WORLD 
说明: 超过文本长度替换
示例6

输入:

hell 
FORWARD 100000 
REPLACE o 
输出: 
hello 
说明: 超出文本长度替换

四、要求

时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K

五、参考代码 

# -*- coding: utf-8 -*-
'''
@File    :   2023-B-代码编辑器.py
@Time    :   2023/12/23 20:52:31
@Author  :   mgc 
@Version :   1.0
@Desc    :   None
'''

class CodeEditor:
    def __init__(self, text):
        self.text = text
        self.cursor = 0  # 初始化游标位置为文本开头

    def process_commands(self, commands):
        for command in commands:
            self.execute_command(command)
        return self.text

    def execute_command(self, command):
        parts = command.split()
        cmd = parts[0]

        if cmd == "FORWARD":
            self.cursor += int(parts[1])
            self.cursor = min(self.cursor, len(self.text))  # 不超过文本末尾

        elif cmd == "BACKWARD":
            self.cursor -= int(parts[1])
            self.cursor = max(self.cursor, 0)  # 不超过文本开头

        elif cmd == "SEARCH-FORWARD":
            index = self.text.find(parts[1], self.cursor)
            if index != -1:
                self.cursor = index

        elif cmd == "SEARCH-BACKWARD":
            index = self.text.rfind(parts[1], 0, self.cursor)
            if index != -1:
                self.cursor = index

        elif cmd == "INSERT":
            word = parts[1]
            self.text = self.text[:self.cursor] + word + self.text[self.cursor:]
            self.cursor += len(word)  # 移动指针到插入词的结尾

        elif cmd == "REPLACE":
            word = parts[1]
            self.text = self.text[:self.cursor] + word + self.text[self.cursor + len(word):]

        # elif cmd == "REPLACE":
        #     word = parts[1]
        #     if ((self.cursor + len(word)) > len(self.text)):
        #         self.text = self.text[:self.cursor] + word
        #     else:
        #         self.text = self.text[:self.cursor] + word + self.text[self.cursor + len(word):]
        #     self.cursor += len(word)

        elif cmd == "DELETE":
            x = int(parts[1])
            self.text = self.text[:self.cursor] + self.text[self.cursor + x:]

# 使用示例
if __name__ == "__main__":
    # 读取输入
    k = int(input())  # 命令列表的长度
    original_text = input()  # 原始文本
    commands = [input() for _ in range(k)]  # 接下来的K行,每行为一个指令

    # 创建编辑器实例并处理命令
    editor = CodeEditor(original_text)
    result_text = editor.process_commands(commands)

    # 输出编辑后的文本
    print(result_text)

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-23 22:06:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-23 22:06:05       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-23 22:06:05       82 阅读
  4. Python语言-面向对象

    2023-12-23 22:06:05       91 阅读

热门阅读

  1. SpringMVC之文件的上传

    2023-12-23 22:06:05       47 阅读
  2. c语言排序算法

    2023-12-23 22:06:05       60 阅读
  3. 【Qt】Qt QML获取当前时间的各种方式

    2023-12-23 22:06:05       44 阅读
  4. MoviePy音视频剪辑:深入了解MoviePy剪辑基类Clip

    2023-12-23 22:06:05       53 阅读
  5. Golang 泛型实现原理

    2023-12-23 22:06:05       64 阅读
  6. 0x28 IDA*

    2023-12-23 22:06:05       57 阅读
  7. 剑指offer题解合集——Week1day7

    2023-12-23 22:06:05       71 阅读
  8. GDB调试技巧实战--为release程序引入结构体定义

    2023-12-23 22:06:05       57 阅读