文章目录

  • 1. 题目
  • 2. 解题

1. 题目

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

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

当删除文本时,只有光标左边的字符会被删除。
光标会留在文本内,也就是说任意时候 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 是光标左边的字符数目。
示例 1:
输入:
["TextEditor", "addText", "deleteText", "addText", "cursorRight", "cursorLeft", "deleteText", "cursorLeft", "cursorRight"]
[[], ["leetcode"], [4], ["practice"], [3], [8], [10], [2], [6]]
输出:
[null, null, 4, null, "etpractice", "leet", 4, "", "practi"]解释:
TextEditor textEditor = new TextEditor(); // 当前 text 为 "|" 。('|' 字符表示光标)
textEditor.addText("leetcode"); // 当前文本为 "leetcode|" 。
textEditor.deleteText(4); // 返回 4// 当前文本为 "leet|" 。// 删除了 4 个字符。
textEditor.addText("practice"); // 当前文本为 "leetpractice|" 。
textEditor.cursorRight(3); // 返回 "etpractice"// 当前文本为 "leetpractice|". // 光标无法移动到文本以外,所以无法移动。// "etpractice" 是光标左边的 10 个字符。
textEditor.cursorLeft(8); // 返回 "leet"// 当前文本为 "leet|practice" 。// "leet" 是光标左边的 min(10, 4) = 4 个字符。
textEditor.deleteText(10); // 返回 4// 当前文本为 "|practice" 。// 只有 4 个字符被删除了。
textEditor.cursorLeft(2); // 返回 ""// 当前文本为 "|practice" 。// 光标无法移动到文本以外,所以无法移动。// "" 是光标左边的 min(10, 0) = 0 个字符。
textEditor.cursorRight(6); // 返回 "practi"// 当前文本为 "practi|ce" 。// "practi" 是光标左边的 min(10, 6) = 6 个字符。提示:
1 <= text.length, k <= 40
text 只含有小写英文字母。
调用 addText ,deleteText ,cursorLeft 和 cursorRight 的 总 次数不超过 2 * 10^4 次。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/design-a-text-editor
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 使用 python 的 list 模拟
  • l, r 分别存储光标左侧 和 右侧 的字符
class TextEditor:def __init__(self):self.l = []self.r = []def addText(self, text: str) -> None:for t in text:self.l.append(t)def deleteText(self, k: int) -> int:ct = min(k, len(self.l))for i in range(ct):self.l.pop()return ctdef cursorLeft(self, k: int) -> str:ct = min(k, len(self.l))for i in range(ct):self.r.append(self.l.pop())return ''.join(self.l[-min(len(self.l), 10):])def cursorRight(self, k: int) -> str:ct = min(k, len(self.r))for i in range(ct):self.l.append(self.r.pop())return ''.join(self.l[-min(len(self.l), 10):])

456 ms 38.3 MB Python3


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 2296. 设计一个文本编辑器(双栈)相关推荐

  1. Python:PyQt5设计一个文本编辑器窗体程序(附UI窗体和图片素材下载)

    hello,大家好,我是wangzirui32,今天我们来学习如何用PyQt5设计一个文本编辑器窗体,开始学习吧! 文章目录 1. UI窗体设计 2. 编写代码 2.1 pyuic生成代码 2.2 修 ...

  2. LeetCode 1472. 设计浏览器历史记录(双栈)

    1. 题目 你有一个只支持单个标签页的 浏览器 ,最开始你浏览的网页是 homepage ,你可以访问其他的网站 url ,也可以在浏览历史中后退 steps 步或前进 steps 步. 请你实现 B ...

  3. c语言课程设计文本编辑器实验报告6,C课程设计简易文本编辑器.doc

    C课程设计简易文本编辑器 目录 第一章 课程设计目的和要求1 1.1课程设计的目1 1.2 基本要求1 第二章 课程设计任务内容2 2.1 设计背景2 2.2简易文本编辑器设计内容2 第三章 详细设计 ...

  4. 设单链表中存放n个字符,试设计一个算法,使用栈推断该字符串是否中心对称...

    版权声明:本文为博主原创文章.未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/28281631 转载请注明出 ...

  5. 设计一个算法,借助栈实现单链表链接顺序的逆转

    设计一个算法,借助栈实现单链表链接顺序的逆转: 程序思路:题目要求为借助栈将单链表中的数据逆置输出,栈的特点就是先进后出,只 需要将单链表中的数据依次存储在栈中,然后将栈中的元素依次取出即可.关键代码 ...

  6. LeetCode 1381. 设计一个支持增量操作的栈(deque/数组)

    1. 题目 请你设计一个支持下述操作的栈. 实现自定义栈类 CustomStack : CustomStack(int maxSize):用 maxSize 初始化对象,maxSize 是栈中最多能容 ...

  7. LeetCode 5357. 设计一个支持增量操作的栈

    5357. 设计一个支持增量操作的栈 思路:用数组实现即可 class CustomStack { public:CustomStack(int maxSize) {fill(a,a+1001,-1) ...

  8. LeetCode 1797. 设计一个验证系统(map)

    文章目录 1. 题目 2. 解题 1. 题目 你需要设计一个包含验证码的验证系统. 每一次验证中,用户会收到一个新的验证码,这个验证码在 currentTime 时刻之后 timeToLive 秒过期 ...

  9. 推荐一个文本编辑器Kate

    Kate是KDE的默认文本编辑器,在Windows下使用非常方便,而且是GPL,不会弹窗让你购买之类的. 支持众多编程语言.脚本.配置文件.标记语言等的语法高亮. 支持自动缩进.调整Tab宽度.Tab ...

最新文章

  1. java实现进程管理,Java调用批处理或可执行文件和Runtime、Process类实现Java版进程管理器...
  2. 【目录】 网络瑞士军刀-netcat的秘诀
  3. 20145240 《Java程序设计》第四次实验报告
  4. UIAlertController 大坑
  5. java.util.concurrent 学习(一)
  6. 如何解决gcc版本冲突?
  7. python3 列表取交集_一刻钟学会 Python 3!Python不难学啊!
  8. 解决sockscap64测试代理可以,实际应用无法联网的问题
  9. 上班打卡--- 通过批处理命令执行jar文件来记录上班时间
  10. 最详细的 tf.cholesky_solve(chol, rhs, name=None)函数和tf.matrix_solve(matrix, rhs, adjoint=None, name=None)
  11. 实现win 10 电脑版微信双开
  12. 新手指南:到国外域名注册商注册域名
  13. nginx配置点播服务
  14. 信捷plc485通信上位机_三菱FX3U编程口通信上位机QT实现
  15. 【微信小程序】页面tabBar切换、下拉刷新
  16. 《Raytracing In One Weekend》学习笔记 Chapter 1、2、3、4、5、6、7、8、9、10、11、12、13
  17. Notes/Domino的未来在于
  18. The Most Common Habits from more than 200 English Papers written by Graduate Chinese Students
  19. hibernate中hbm.xmlmany-to-oneone-to-many中一些属性详解
  20. 知识表示学习 (一) —— Point-Wise Space之1

热门文章

  1. Java中Stream的使用
  2. 5 张图带你理解 RocketMQ 消费者启动过程
  3. HTTPS原理解析-转
  4. 斗地主滑动选牌出牌(Cocos Creator)
  5. 上班第一天总结(以装环境为主)
  6. 数据库第十四次作业 电子商城项目
  7. 人生新的开始,组建大数据公司
  8. 归因分析计算因子贡献度常见的方法
  9. IE兼容rotate旋转效果
  10. Google Maps JavaScript API 使用