Tutorialspoint
Problem
Solution
Submissions

Text Editor

Certification: Advanced Level Accuracy: 0% Submissions: 0 Points: 20

Write a C++ program to implement a text editor that supports basic operations like append, delete, and cursor movement along with undo and redo functionality.

Example 1
  • Input: ["TextEditor", "append", "cursorRight", "append", "cursorLeft", "delete", "undo", "redo", "getText"] [[], ["Hello"], [2], [" World"], [3], [2], [], [], []]
  • Output: [null, null, null, null, null, null, null, null, "Hell World"]
  • Explanation:
    • TextEditor editor = new TextEditor();
    • editor.append("Hello"); // text = "Hello|" (cursor at end of text)
    • editor.cursorRight(2); // can only move cursor right 0 positions
    • editor.append(" World"); // text = "Hello World|"
    • editor.cursorLeft(3); // text = "Hello Wo|rld"
    • editor.delete(2); // text = "Hello |rld"
    • editor.undo(); // text = "Hello Wo|rld"
    • editor.redo(); // text = "Hello |rld"
    • editor.getText(); // returns "Hell World"
Example 2
  • Input: ["TextEditor", "append", "append", "delete", "cursorLeft", "cursorRight", "undo", "getText"] [[], ["ABC"], ["DEF"], [1], [5], [2], [], []]
  • Output: [null, null, null, null, null, null, null, "ABCDEF"]
  • Explanation:
    • TextEditor editor = new TextEditor();
    • editor.append("ABC"); // text = "ABC|"
    • editor.append("DEF"); // text = "ABCDEF|"
    • editor.delete(1); // text = "ABCDE|"
    • editor.cursorLeft(5); // text = "|ABCDE"
    • editor.cursorRight(2); // text = "AB|CDE"
    • editor.undo(); // text = "ABCDEF|" (undoes the delete operation)
    • editor.getText(); // returns "ABCDEF"
Constraints
  • 1 <= text.length <= 100
  • 1 <= k <= 100
  • The editor initially starts with an empty text.
  • The undo and redo operations return the state of the editor before and after the corresponding operation.
  • At most 2000 calls will be made to all operations combined.
  • Time Complexity: O(1) amortized for all operations
  • Space Complexity: O(N) where N is the total length of all text operations
StackData StructureKPMGArctwist
Editorial

Login to view the detailed solution and explanation for this problem.

My Submissions
All Solutions
Lang Status Date Code
You do not have any submissions for this problem.
User Lang Status Date Code
No submissions found.

Please Login to continue
Solve Problems

 
 
 
Output Window

Don't have an account? Register

Solution Hints

  • Use two stacks for undo and redo operations.
  • Use a string or a data structure optimized for insertions and deletions.
  • Track the cursor position carefully within bounds.
  • Each operation should be recorded for undo/redo functionality.
  • Consider using a doubly-linked list or a gap buffer for text representation.

Steps to solve by this approach:

 Step 1: Design a data structure to represent text and cursor position
 Step 2: Create an Operation class to track each editor action for undo/redo
 Step 3: Implement append operation with proper cursor management
 Step 4: Implement delete operation ensuring cursor position bounds
 Step 5: Implement cursor movement operations with boundary checks
 Step 6: Implement undo operation by reversing the last action
 Step 7: Implement redo operation to replay undone actions

Submitted Code :