Problem of the day
You are given a string ‘S’. You are also given ‘M’ integers in an array ‘A’. You perform ‘M’ operations on this string. The operations are given in an array ‘A’ of size ‘M’.
You perform the operations in the order they appear in the array ‘A’. In the ‘i’th operation, you reverse the substring of ‘S’ from the position ‘A[i]’ to ‘len(S)’ - ‘A[i]’ - 1 (0 based).
Your task is to find the string after performing all the operations.
Example :‘S’ = “aabcd”, ‘M’ = 2, ‘A’ = [0, 1]
After 1st operation i.e, reversing from [0, 4], ‘S’ = “dcbaa”.
After 2nd operation i.e, reversing from [1, 3], ‘S’ = “dabca”.
Hence, the answer is “dabca”.
The first line contains a single integer ‘T’ denoting the number of test cases, then the test case follows.
The first line of each test case contains a string ‘S’ consisting of lowercase English characters without spaces.
The second line of each test case contains a single integer ‘M’ denoting the number of operations.
The third line of each test case contains ‘M’ space-separated integers denoting the elements of the array ‘A’.
Output Format :
For each test case, find the string after performing all the operations.
Output for each test case will be printed on a separate line.
Note :
You are not required to print anything; it has already been taken care of. Just implement the function.
1 ≤ T ≤ 10
1 ≤ len(S) ≤ 10^5
1 ≤ M ≤ 10^5
Each ‘A[i]’ is such that the range [‘A[i]’, len(‘S’) - ‘A[i]’ - 1] is non-empty.
It is guaranteed that the sum of lengths of ‘S’ and ‘M’ is ≤ 10^5 for all test cases, respectively.
Time limit: 1 sec
2
gaagbd
3
2 2 2
dbgd
5
1 1 1 0 0
gagabd
dgbd
For test case 1:
Here, len(‘S’) = 6. So, we need to reverse the string ‘S’[2, 3] three times.
After 1st reversal: ‘S’ = “gagabd”.
After 2nd reversal: ‘S’ = “gaagbd”.
After 3rd reversal: ‘S’ = “gagabd”.
Hence, the answer is “gagabd”.
For test case 2:
Here, len(‘S’) = 4. We need to reverse the string ‘S’[1, 2], ‘S’[1, 2], ‘S’[1, 2], ‘S’[0, 3], ‘S’[0, 3].
After 1st reversal: ‘S’ = “dgbd”
After 2nd reversal: ‘S’ = “dbgd”
After 3rd reversal: ‘S’ = “dgbd”
After 4th reversal: ‘S’ = “dbgd”
After 5th reversal: ‘S’ = “dgbd”
Hence, the answer is “dgbd”.
2
cgagbga
4
0 2 1 0
daa
3
1 0 1
cgagbga
aad
Does the order of operations matter?
Approach:
Algorithm:
O(N + M), where ‘N’ denotes the length of the string ‘S’, and ‘M’ denotes the number of operations.
We iterate over all the operations and, in constant time, increment the corresponding operations’ value in ‘c’. We declare an array of size ‘N’ / 2 in ‘c’ and iterate over it to perform prefix sums.
Hence, the time complexity is O(N + M).
O(N), where ‘N’ denotes the length of the string ‘S’.
We create an array ‘c’ of size ‘N’ / 2.
Hence, the space complexity is O(N).