Simple Text Editor HackerRank Solution in Java with Explanation
Problem Description :
Implement a simple text editor. The editor initially contains an empty string S. Perform Q operations of the following 4 types:
- append (W) - Append string W to the end of S.
- delete (k) - Delete the last K characters of S.
- print (k) - Print the kth character of S.
- undo () - Undo the last (not previously undone) operation of type 1 or 2, reverting S to the state it was in prior to that operation.
Example :
Input :
S = "abcde"
Operations = ["1 fg", "3 6", "2 5", "4", "3 7", "4", "3 4"]
index S ops[index] explanation
----- ------ ---------- -----------
0 abcde 1 fg append fg
1 abcdefg 3 6 print the 6th letter - f
2 abcdefg 2 5 delete the last 5 letters
3 ab 4 undo the last operation, index 2
4 abcdefg 3 7 print the 7th characgter - g
5 abcdefg 4 undo the last operation, index 0
6 abcde 3 4 print the 4th character - d
Output :
f
g
d
See full problem description and on HackerRank site :
In this problem, we have to perform 4 operations on given String :
- Add or Append
- Delete the last characters from given number
- Print the character of given index number
- Undo last operation.
First 3 operations are easy, for 4th operation we have to maintain Stack. So we can undo last operation and store into given String S. So lets go...
Solution 1 : Simple Text Editor Solution in Java
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
Stack<String> stack = new Stack<>();
int totalOp = Integer.parseInt(bufferedReader.readLine().trim());
StringBuilder builder = new StringBuilder();
while (totalOp-- > 0) {
String s = bufferedReader.readLine().trim();
int operation = Integer.parseInt(s.substring(0, 1));
switch (operation) {
case 1: {
String value = s.substring(2, s.length());
stack.push(builder.toString());
builder.append(value);
break;
}
case 2: {
stack.push(builder.toString());
String value = s.substring(2, s.length());
int index = Integer.parseInt(value);
builder.delete(builder.length()-index, builder.length());
break;
}
case 3: {
String value = s.substring(2, s.length());
int index = Integer.parseInt(value);
System.out.println(builder.charAt(index-1));
break;
}
case 4: {
StringBuilder b = new StringBuilder(stack.pop());
builder = b;
break;
}
}
}
bufferedReader.close();
}
}
Solution Explanation :
- We maintains Stack for undo operations. So push data before append or delete characters from String.
- First read input data from using BefferedReader.
- We have to perform operations till given number. so loop until totalOp becomes 0 in while loop.
- Get data one by one using readLine() method. (First column contains operation number).
- Now perform switch case on operations number.
- In 1st operation, we have to perform append operation on given string.
- Push current string data to Stack and append string to already given string.
- Push current string data to Stack and delete characters from given number to string length.
- Print given index character
- Pop last string from Stack and assign to String.
Other HackerRank problem and solutions :
Comments
Post a Comment