【力扣题解】6093. 设计一个文本编辑器
😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
文章目录
-
- 一、题目
-
- 1、题目描述
- 2、基础框架
- 3、原题链接
- 二、解题报告
-
- 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 是光标左边的字符数目。
2、基础框架
- Java版本框架代码如下:
class TextEditor { public TextEditor() { } public void addText(String text) { } public int deleteText(int k) { } public String cursorLeft(int k) { } public String cursorRight(int k) { }}
3、原题链接
6093. 设计一个文本编辑器
二、解题报告
1、思路分析
(1)直接用StringBuffer模拟就可以,善于用StringBuffer的内置函数。
2、代码详解
class TextEditor { int index ; StringBuffer sb ; public TextEditor() { index = -1; sb = new StringBuffer(); } public void addText(String text) { if(index == -1) { if(sb.length() != 0) { sb = sb.insert(0,text); index = text.length() - 1; }else { sb.append(text); index = sb.length() - 1; } return; } if(index == sb.length() - 1) { sb.append(text); }else{ sb = sb.insert(index + 1,text); } index = index + text.length(); } public int deleteText(int k) { int res = index; if(k >= index + 1) { sb = sb.delete(0,index + 1); index = -1; return res + 1; }else { sb = sb.delete(index - k + 1,index + 1); index = index - k; return k; } } public String cursorLeft(int k) { if(k > index) { index = -1; return ""; }else { index = index - k; if(index >= 9) { return sb.substring(index -9,index + 1); }else { return sb.substring(0,index + 1); } } } public String cursorRight(int k) { if(index == -1) { if(sb.length() == 0) { return ""; } index = index + k; if(index >= 9) { return sb.substring(index -9,index + 1); }else { return sb.substring(0,index + 1); } } if(k > sb.length() - index - 1) { index = sb.length() - 1; }else { index = index + k; } if(index >= 9) { return sb.substring(index -9,index + 1); }else { return sb.substring(0,index + 1); } }}
三、本题知识
模拟
注意:一定要搞清楚index的边界。