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

😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈

一、题目

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的边界。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值