当前位置: 首页 > article >正文

Leetcode2296:设计一个文本编辑器

题目描述:

请你设计一个带光标的文本编辑器,它可以实现以下功能:

  • 添加:在光标所在处添加文本。
  • 删除:在光标所在处删除文本(模拟键盘的删除键)。
  • 移动:将光标往左或者往右移动。

当删除文本时,只有光标左边的字符会被删除。光标会留在文本内,也就是说任意时候 0 <= cursor.position <= currentText.length 都成立。

请你实现 TextEditor 类:

  • TextEditor() 用空文本初始化对象。
  • void addText(string text) 将 text 添加到光标所在位置。添加完后光标在 text 的右边。
  • int deleteText(int k) 删除光标左边 k 个字符。返回实际删除的字符数目。
  • string cursorLeft(int k) 将光标向左移动 k 次。返回移动后光标左边 min(10, len) 个字符,其中 len 是光标左边的字符数目。
  • string cursorRight(int k) 将光标向右移动 k 次。返回移动后光标左边 min(10, len) 个字符,其中 len 是光标左边的字符数目。

代码思路: 

__init__(self)

  • 初始化方法,创建了两个空字符串属性leftright
  • 这两个字符串分别用于存储光标左侧和右侧的文本。

addText(self, text: str) -> None

  • 功能:在光标当前位置(即left的末尾)添加文本。
  • 参数:text是要添加的字符串。
  • 实现:直接将text追加到left字符串的末尾。
  • 返回值:无。

deleteText(self, k: int) -> int

  • 功能:从光标当前位置(即left的末尾)向前删除k个字符。
  • 参数:k是要删除的字符数。
  • 实现:
    • 首先计算left的长度l1
    • 然后通过切片操作self.left[:-k]删除left末尾的k个字符。
    • 返回实际删除的字符数(由于left的长度变化,实际删除的字符数可能小于k,如果k大于left的长度)。
  • 返回值:实际删除的字符数。

cursorLeft(self, k: int) -> str

  • 功能:将光标向左移动k个字符位置,并将移动过的字符从left移动到right
  • 参数:k是光标向左移动的字符数。
  • 实现:
    • 通过切片操作self.left[-k:]获取left末尾的k个字符,并将它们移动到right的开头。
    • 同时,更新left,去掉末尾的k个字符。
    • 返回left的末尾10个字符(如果left长度小于10,则返回全部)。
  • 返回值:移动后left的末尾10个字符。

cursorRight(self, k: int) -> str

  • 功能:将光标向右移动k个字符位置,并将移动过的字符从right移动到left
  • 参数:k是光标向右移动的字符数。
  • 实现:
    • 通过切片操作self.right[:k]获取right开头的k个字符,并将它们移动到left的末尾。
    • 同时,更新right,去掉开头的k个字符。
    • 返回left的末尾10个字符(如果left长度小于10,则返回全部)。
  • 返回值:移动后left的末尾10个字符。

代码实现:

class TextEditor:

    def __init__(self):
        self.left = ""
        self.right = ""

    def addText(self, text: str) -> None:
        self.left += text

    def deleteText(self, k: int) -> int:
        l1 = len(self.left)
        self.left = self.left[:-k]
        return l1 - len(self.left)

    def cursorLeft(self, k: int) -> str:
        self.right = self.left[-k:] + self.right
        self.left = self.left[:-k]
        return self.left[-10:]

    def cursorRight(self, k: int) -> str:
        self.left = self.left + self.right[:k]
        self.right = self.right[k:]
        return self.left[-10:]

 


http://www.kler.cn/a/565446.html

相关文章:

  • RabbitMQ系列(七)基本概念之Channel
  • 在MacOS上打造本地部署的大模型知识库(一)
  • Springboot 事件通知监听
  • WebSocket相关技术
  • vue2版本elementUI的table分页实现多选逻辑
  • 【AHK】资源管理器自动化办公实例/自动连点设置
  • JavaScript系列(86)--现代构建工具详解
  • 论文阅读:A comprehensive survey on model compression and acceleration
  • Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法
  • Oracle 19c静默安装并手动创建数据库
  • 泛型的约束有哪几种?(C#)
  • Linux 下使用tracepath进行网络诊断分析
  • Prometheus2.53.3 | 监控系统安装与配置指南(已成功安装)
  • U盘安装VMWARE虚拟机
  • 小红的回文子串(B组)
  • Web自动化之Selenium 超详细教程(python)
  • 使用vscode导出Markdown的PDF无法显示数学公式的问题
  • 工具MyBatis Generator(MBG)
  • 【Java项目】基于Spring Boot的旅游管理系统
  • 纷析云:赋能企业财务数字化转型的开源解决方案