Вопрос:

Дано математическое уравнение, содержащее только числа и +, -, *, /. Выведите уравнение в обратном порядке, чтобы уравнение стало обратным, но числа остались прежними.
Гарантируется, что заданное уравнение верно, и в нем нет ведущих нулей.

Пример 1:

Input:
S = "20-3+5*2"
Output: 2*5+3-20
Explanation: The equation is reversed with
numbers remaining the same.

Пример 2:

Input: 
S = "5+2*56-2/4"
Output: 4/2-56*2+5
Explanation: The equation is reversed with
numbers remaining the same.

Ваша задача
Вам не нужно ничего читать или печатать. Ваша задача — завершить функцию reverseEqn(), которая принимает в качестве входных данных строку S, представляющую уравнение, и возвращает результирующую строку, представляющую уравнение в обратном порядке.

Ожидаемая временная сложность:O(|S|).
Ожидаемое вспомогательное пространство:O(|S|).

Ограничения:
1‹=|S|‹=105
Строка содержит только символы '0' — '9', '+', '-', '* ', и '/'.

Решение:

Подход:

Здесь нам нужно обратить данное уравнение, и мы делаем это, меняя местами числа в уравнениях и, наконец, меняя местами всю строку.

Пример:

20-3+5*2 #Input.
    |
    V
02-3+5*2 #reversed numbers of the equation.
    |
    v
2*5+3-20 #output.

Код:

class Solution
{
  public:
    string reverseEqn (string s){
        int i=0;
        int n = s.size();
        while(i<n){
            int j = i;
            while(j<n && (s[j] != '+' && s[j] != '-' && s[j] != '*' && s[j] != '/')){
                j++;
            }
            reverse(s.begin()+i, s.begin()+j);
            i=j+1;
        }
        reverse(s.begin(), s.end());
        return s;
    }
};

Объяснение:

Внешний цикл используется для обхода всей строки, а внутренний цикл используется для поиска предыдущей позиции символа.

Метод reverse() в С++ используется в обратном порядке для заданного массива, где s.begin() указывает начальное местоположение строки, а s.end() указывает конечное местоположение строки.

Временная сложность: O(N)

Космическая сложность: O(1)

Заключение:

Надеюсь, что решение окажется полезным и вам, ребята, понравилось. Давайте обсудим новые подходы.

Удачного кодирования.