Қавсҳоро аз сатри алгебравӣ, ки дорои + ва - оператор мебошанд, хориҷ кунед


Сатҳи душворӣ миёна
Аксар вақт пурсида мешавад Adobe Amazon Фуркайтҳо
тӯда сатр

Изҳороти мушкилот

Ба шумо дода мешавад данд ҳаҷми n ифодаи арифметикӣ бо қавс. Масъалаи "Хориҷ кардани қавс аз сатри алгебравии дорои + ва - операторҳо" аз мо хоҳиш мекунад, ки функсияеро созем, ки ифодаи додашударо содда кунад.

мисол

Қавсҳоро аз сатри алгебравӣ, ки дорои + ва - оператор мебошанд, хориҷ кунед

s = "a-(b+c)"
a-b-c
 s = a-(b-c-(d+e))-f
a-b+c+d+e-f

Алгоритми хориҷ кардани қавс аз сатри алгебравӣ, ки дорои операторҳои + ва - мебошанд

  1. Сатри ҳаҷми n-ро оғоз кунед, ки ифодаи арифметикиро бо қавс ифода мекунад.
  2. Барои нигоҳ доштани натиҷа сатри дигар созед. Тағирёбандаи бутунро оғоз кунед шохиси ҳамчун 0 ва сохтори маълумотҳои стеки навъи бутун ва дар он 0 пахш кунед / дохил кунед.
  3. Пас аз он, тавассути додашуда гузаред сатр. Санҷед, ки аломат дар индекси ҷорӣ ба '+' баробар аст. Ва санҷед, ки оё унсури болои стек 1 аст, сатри натиҷаро дар индекс + 1 ҳамчун '-' навсозӣ кунед, агар элемент дар болои стек ба 0 баробар бошад, сатри натиҷаро дар индекс + 1 ҳамчун нав кунед '+'.
  4. Дар акси ҳол, агар аломати индекси ҷорӣ дар сатри додашуда ба '-' баробар бошад, санҷед, ки оё элемент дар болои стек ба 1 баробар аст, сатри натиҷаҳоро дар индекс + 1 ҳамчун '+' дигар навсозед, агар элемент дар болои стек ба 0 баробар аст, сатри натиҷаҳоро дар индекс + 1 ҳамчун '-' навсозӣ кунед.
  5. Ба ҳамин монанд, санҷед, ки аломат дар индекси ҷорӣ дар сатри додашуда ба '(' ва индекси ҷорӣ аз 0 калонтар аст, санҷед, ки аломати индекси ҷорӣ - 1 дар сатри додашуда ба '-' баробар аст, тағирёбандаи бутунро эҷод кунед ва онро ҳамчун 0 навсозед, агар унсури болои стек ба 1 дигар баробар бошад 0. Дигар агар аломати индекси ҷорӣ - 1 дар сатри додашуда ба '+' баробар бошад, элементро ба тугмаи болои стеллажь дар худи стек.
  6. Пас аз он, санҷед, ки аломатҳои индекси ҷорӣ дар сатри додашуда ба ')' баробаранд, унсурро дар болои стек ҷойгир кунед.
  7. Дигар сатри натиҷаҳоро дар индекс + 1 ҳамчун аломат дар шохиси ҷории сатри додашуда навсозӣ кунед.

рамз

C ++ Барномаи хориҷ кардани қавс аз сатри алгебравӣ, ки дорои + ва - операторҳо мебошанд

#include <bits/stdc++.h> 
using namespace std; 
  
char* simplify(string s){ 
    int n = s.length(); 
  
    char* res = new char(n); 
    int index = 0, i = 0; 
  
    stack<int> st; 
    st.push(0); 
  
    while(i < n){ 
        if(s[i] == '+'){ 
            
            if(st.top() == 1){ 
                res[index++] = '-';
            }
            
            if(st.top() == 0){ 
                res[index++] = '+'; 
            }
        } 
        
        else if(s[i] == '-'){ 
            
            if(st.top() == 1){ 
                res[index++] = '+';
            }
            
            else if(st.top() == 0){ 
                res[index++] = '-';
            }
        } 
        
        else if(s[i] == '(' && i > 0){ 
            
            if(s[i - 1] == '-'){ 
                int x = (st.top() == 1) ? 0 : 1; 
                st.push(x); 
            } 
  
            else if(s[i - 1] == '+'){ 
                st.push(st.top()); 
            }
        } 
  
        else if(s[i] == ')'){ 
            st.pop(); 
        }
  
        else{
            res[index++] = s[i];
        }
        i++; 
    } 
    return res; 
} 
  
int main(){ 
    string s = "a-(b+c)"; 
    cout << simplify(s) << endl; 
    return 0; 
}
a-b-c

Барномаи Java барои нест кардани қавс аз сатри алгебравӣ, ки дорои операторҳои + ва - мебошанд

import java.util.*; 

class SimplifyExp{  
  
    static String simplify(String s){  
        int n = s.length();  
      
        char res[] = new char[n];  
        int index = 0, i = 0;  
      
        Stack<Integer> st = new Stack<Integer> ();  
        st.push(0);  
      
        while(i < n){  
            if(s.charAt(i) == '+'){  
      
                if(st.peek() == 1){  
                    res[index++] = '-';
                }
      
                if(st.peek() == 0){  
                    res[index++] = '+';
                }
            } 
            
            else if(s.charAt(i) == '-'){  
                
                if(st.peek() == 1){  
                    res[index++] = '+';
                }
                
                else if(st.peek() == 0){  
                    res[index++] = '-'; 
                }
            } 
            
            else if(s.charAt(i) == '(' && i > 0){
                
                if(s.charAt(i - 1) == '-'){  
                    int x = (st.peek() == 1) ? 0 : 1;  
                    st.push(x);  
                }  
      
                else if(s.charAt(i - 1) == '+'){  
                    st.push(st.peek());  
                }
            }  
      
            else if(s.charAt(i) == ')'){  
                st.pop();  
            }
      
            else{
                res[index++] = s.charAt(i);
            }
            i++;  
        }  
        return new String(res);  
    }  
      
    public static void main(String[] args){  
        String s = "a-(b+c)";  
        System.out.println(simplify(s));  
    } 
}
a-b-c

Таҳлили мураккабӣ

Мураккабии вақт

Эй (н) ки n шумораи аломатҳои сатри додашуда мебошад. Чӣ тавре ки мебинем, мо аз болои элементҳои сатри вуруди додашуда мегузарем. Ҳамин тариқ, мураккабии вақт хатӣ аст.

Мураккабии фазо

Эй (н) зеро мо барои нигоҳ доштани аломатҳо фазоро истифода кардем. Азбаски мо як сатри навро барои нигоҳ доштани натиҷа эҷод кардем, мураккабии фазо низ хаттӣ аст.