# Day 14 of 30-Day LeetCode Challenge

--

*You are given a string **s** containing lowercase English letters, and a matrix **shift**, where **shift[i] = [direction, amount]**:*

*direction**can be**0**(for left shift) or**1**(for right shift).**amount**is the amount by which string**s**is to be shifted.**A left shift by 1 means remove the first character of**s**and append it to the end.**Similarly, a right shift by 1 means remove the last character of**s**and add it to the beginning.*

*Return the final string after all operations.*

**C++ Solution : O(n) time & O(1) space**

*static auto x = [](){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); return nullptr;}();*

*class Solution {public: string shiftByK(string s, int k){ reverse(s.begin(), s.begin()+k); reverse(s.begin()+k, s.end()); reverse(s.begin(), s.end()); return s; } string stringShift(string s, vector<vector<int>>& shift) { //O(n) time & O(1) space int shiftValue = 0; //left shift : negative //right shift : positive for(int i=0;i<shift.size();++i){ if(shift[i][0]==0) shiftValue += (-1*shift[i][1]); else if(shift[i][0]==1) shiftValue += shift[i][1]; } int k = 0; //rotate string anti-clockwise k time if(shiftValue<0){ //left shift by abs(shift) if(abs(shiftValue)>s.size()) shiftValue = abs(shiftValue)%s.size(); k = abs(shiftValue); }else if(shiftValue>0){ //right shift by abs(shift) if(shiftValue>s.size()) shiftValue = shiftValue%s.size(); k = s.size()-shiftValue; } return shiftByK(s, k); }};*