> 文档中心 > 【力扣题解】6093. 设计一个文本编辑器

【力扣题解】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的边界。