The basic framework for divide and conquer algorithm can be used for any operations like reverse, checking if array is sorted etc. The possible implementation of reversing a string/vector is given as follows which takes O(n) time where n is size of collection string/vector.
template<class BidirIt>
void reverse(BidirIt first, BidirIt last)
{
while ((first != last) && (first != --last)) {
std::iter_swap(first++, last);
}
}
Better algorithm for this can be given as follows:
#include <iostream>
#include <algorithm>
#include <string>
template <typename T>
void reverse_rotate(T first, T last){
if((first == last) || std::next(first) == last) return;
T middle = first;
std::advance(middle, std::distance(first, last)/2);
reverse_rotate(first, middle);
reverse_rotate(middle, last);
std::rotate(first, middle, last);
}
int main(){
std::string s = "This is super cool";
reverse_rotate(s.begin(), s.end());
std::cout << s << '\n';
}

I was thinking of the same idea and luckily found this blog. 🙂 Thanks
LikeLike