Skip to content

Design a Text Editor

Leetcode - Design a Text Editor

Submission

class TextEditor {
    Stack<Character> left;
        Stack<Character> right;

        TextEditor() {
            this.left = new Stack<>();
            this.right = new Stack<>();
        }

        void addText(String text) {
            for (char c: text.toCharArray()) {
                this.left.push(c);
            }
        }

        int deleteText(int k) {
            int count = 0;
            while(!left.isEmpty() && k > 0) {
                left.pop();
                count++;
                k--;
            }

            return count;
        }

        String cursorLeft(int k) {
            while(!left.isEmpty() && k > 0) {
                char c = left.pop();
                right.push(c);
                k--;
            }

            return cursorString();
        }

        String cursorRight(int k) {
            while(!right.isEmpty() && k > 0) {
                char c = right.pop();
                left.push(c);
                k--;
            }

            return cursorString();
        }

        private String cursorString() {
            StringBuilder sb = new StringBuilder();
            int count = 10;
            while(!left.isEmpty() && count > 0) {
                sb.insert(0, left.pop());
                count--;
            }
            String ret = sb.toString();
            for (char c: ret.toCharArray()) {
                left.push(c);
            }
            return ret;
        }
}