2026-01-05 14:24:49 +0300 MSK
Design a Text Editor
Links
Code
class Node:
def __init__(
self,
char: str,
prev: Optional["Node"],
nxt: Optional["Node"]
) -> None:
self.char = char
self.prev = prev
self.nxt = nxt
class TextEditor:
def __init__(self):
self.length = 0
self.root = Node("", None, None)
self.cursor = self.root
def addText(self, text: str) -> None:
node = self.cursor
self.length += len(text)
for char in text:
cur = Node(char, node, node.nxt)
nxt = node.nxt
node.nxt = cur
if nxt:
nxt.prev = cur
node = cur
self.cursor = cur
def deleteText(self, k: int) -> int:
res = 0
while self.cursor is not self.root and k > 0:
res += 1
k -= 1
if self.cursor.nxt:
self.cursor.nxt.prev = self.cursor.prev
self.cursor.prev.nxt = self.cursor.nxt
self.cursor = self.cursor.prev
return res
def last_ten(self) -> str:
res = []
node = self.cursor
while node is not self.root and len(res) < 10:
res.append(node.char)
node = node.prev
res.reverse()
return "".join(res)
def cursorLeft(self, k: int) -> str:
while self.cursor is not self.root and k > 0:
k -= 1
self.cursor = self.cursor.prev
res = self.last_ten()
return res
def cursorRight(self, k: int) -> str:
while self.cursor.nxt and k > 0:
k -= 1
self.cursor = self.cursor.nxt
res = self.last_ten()
return res
# Your TextEditor object will be instantiated and called as such:
# obj = TextEditor()
# obj.addText(text)
# param_2 = obj.deleteText(k)
# param_3 = obj.cursorLeft(k)
# param_4 = obj.cursorRight(k)