304 North Cardinal St.
Dorchester Center, MA 02124

# Design a Text Editor LeetCode Solution

## Problem – Design a Text Editor LeetCode Solution

Design a text editor with a cursor that can do the following:

• Add text to where the cursor is.
• Delete text from where the cursor is (simulating the backspace key).
• Move the cursor either left or right.

When deleting text, only characters to the left of the cursor will be deleted. The cursor will also remain within the actual text and cannot be moved beyond it. More formally, we have that `0 <= cursor.position <= currentText.length` always holds.

Implement the `TextEditor` class:

• `TextEditor()` Initializes the object with empty text.
• `void addText(string text)` Appends `text` to where the cursor is. The cursor ends to the right of `text`.
• `int deleteText(int k)` Deletes `k` characters to the left of the cursor. Returns the number of characters actually deleted.
• `string cursorLeft(int k)` Moves the cursor to the left `k` times. Returns the last `min(10, len)` characters to the left of the cursor, where `len` is the number of characters to the left of the cursor.
• `string cursorRight(int k)` Moves the cursor to the right `k` times. Returns the last `min(10, len)` characters to the left of the cursor, where `len` is the number of characters to the left of the cursor.

Example 1:

``````Input
[[], ["leetcode"], , ["practice"], , , , , ]
Output
[null, null, 4, null, "etpractice", "leet", 4, "", "practi"]

Explanation
TextEditor textEditor = new TextEditor(); // The current text is "|". (The '|' character represents the cursor)
textEditor.addText("leetcode"); // The current text is "leetcode|".
textEditor.deleteText(4); // return 4
// The current text is "leet|".
// 4 characters were deleted.
textEditor.addText("practice"); // The current text is "leetpractice|".
textEditor.cursorRight(3); // return "etpractice"
// The current text is "leetpractice|".
// The cursor cannot be moved beyond the actual text and thus did not move.
// "etpractice" is the last 10 characters to the left of the cursor.
textEditor.cursorLeft(8); // return "leet"
// The current text is "leet|practice".
// "leet" is the last min(10, 4) = 4 characters to the left of the cursor.
textEditor.deleteText(10); // return 4
// The current text is "|practice".
// Only 4 characters were deleted.
textEditor.cursorLeft(2); // return ""
// The current text is "|practice".
// The cursor cannot be moved beyond the actual text and thus did not move.
// "" is the last min(10, 0) = 0 characters to the left of the cursor.
textEditor.cursorRight(6); // return "practi"
// The current text is "practi|ce".
// "practi" is the last min(10, 6) = 6 characters to the left of the cursor.
``````

Constraints:

• `1 <= text.length, k <= 40`
• `text` consists of lowercase English letters.
• At most `2 * 104` calls in total will be made to `addText``deleteText``cursorLeft` and `cursorRight`.

### Design a Text Editor LeetCode Solution in C++

``````class TextEditor {
stack<char> left;
stack<char> right;
public:
TextEditor() {

}

for(auto &c : text){
left.push(c);
}
}

int deleteText(int k) {
int cnt=0;
while(!left.empty() and k>0){
left.pop();
cnt++;
k--;
}
return cnt;
}

string cursorLeft(int k) {
while(!left.empty() and k>0){
char c = left.top();left.pop();
right.push(c);
k--;
}
return cursorShiftString();
}

string cursorRight(int k) {
while(!right.empty() and k>0){
char c = right.top();right.pop();
left.push(c);
k--;
}
return cursorShiftString();
}

string cursorShiftString(){
string rtn = "";
int cnt=10;
while(!left.empty() and cnt>0){
char c = left.top();left.pop();
rtn += c;
cnt--;
}
reverse(rtn.begin(),rtn.end());
for(int i=0;i<rtn.size();i++){
left.push(rtn[i]);
}
return rtn;
}
};
``````

### Design a Text Editor LeetCode Solution in Java

``````class TextEditor {
StringBuilder res;
int pos=0;

public TextEditor() {
res = new StringBuilder();
}

res.insert(pos,text);
pos += text.length();
}

public int deleteText(int k) {
int tmp = pos;
pos -= k;
if(pos<0) pos=0;
res.delete(pos,tmp);
return tmp-pos;
}

public String cursorLeft(int k) {
int tmp = pos;
pos-=k;
if(pos<0) pos = 0;
if(pos<10) return res.substring(0,pos);
return res.substring(pos-10,pos);
}

public String cursorRight(int k) {
int tmp = pos;
pos+=k;
if(pos>res.length()) pos = res.length();
if(pos<10) return res.substring(0,pos);
return res.substring(pos-10,pos);
}
}

``````

### Design a Text Editor LeetCode Solution in Python

``````class TextEditor:

def __init__(self):
self.s = ''
self.cursor = 0

def addText(self, text: str) -> None:
self.s = self.s[:self.cursor] + text + self.s[self.cursor:]
self.cursor += len(text)

def deleteText(self, k: int) -> int:
new_cursor = max(0, self.cursor - k)
noOfChars = k if self.cursor - k >= 0 else self.cursor
self.s = self.s[:new_cursor] + self.s[self.cursor:]
self.cursor = new_cursor
return noOfChars

def cursorLeft(self, k: int) -> str:
self.cursor = max(0, self.cursor - k)
start = max(0, self.cursor-10)
return self.s[start:self.cursor]

def cursorRight(self, k: int) -> str:
self.cursor = min(len(self.s), self.cursor + k)
start = max(0, self.cursor - 10)
return self.s[start:self.cursor]
``````
##### Design a Text Editor LeetCode Solution Review:

In our experience, we suggest you solve this Design a Text Editor LeetCode Solution and gain some new skills from Professionals completely free and we assure you will be worth it.

If you are stuck anywhere between any coding problem, just visit Queslers to get the Design a Text Editor LeetCode Solution

Find on LeetCode

##### Conclusion:

I hope this Design a Text Editor LeetCode Solution would be useful for you to learn something new from this problem. If it helped you then don’t forget to bookmark our site for more Coding Solutions.

This Problem is intended for audiences of all experiences who are interested in learning about Data Science in a business context; there are no prerequisites.

Keep Learning!

More Coding Solutions >>

LeetCode Solutions

Hacker Rank Solutions

CodeChef Solutions