😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
一、题目
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、原题链接
二、解题报告
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的边界。