1. 程式人生 > >面試刷題記錄

面試刷題記錄

寫一段程式碼,判斷一個包括’{‘,’[‘,’(‘,’)’,’]’,’}’的表示式是否合法(注意看樣例的合法規則。)
給定一個表示式A,請返回一個bool值,代表它是否合法。
測試樣例:
“[a+b*(5-4)]{x+b+b({1+2)}}”
返回:true
測試樣例:
“[a+b*(5-4)]{x+b+b(({1+2)}}”
返回:false

include < vector>
include < iostream>

using namespace std;

class ChkExpression {
public:
bool chkLegal(string A)
{
vector stack;
for(int i = 0;i< A.size();i++)
{
if(A[i] == ‘{’ || A[i] == ‘(’ || A[i] == ‘[‘)
{
stack.push_back(A[i]);
}
else if(A[i] == ‘}’ || A[i] == ‘)’ || A[i] == ‘]’)
{
int a = stack.size();
if(a < 1)return false;
//cout << a<< endl;
//if ((stack[a-1] == ‘(’ && A[i] == ‘)’) || (stack[a-1] == ‘{’ && A[i] == ‘}’) || (stack[a-1] == ‘[’ && A[i] == ‘]’))
else stack.pop_back();
//return false;
//else cout<<”false”<< endl;
}
}
if(stack.size()>0)return false;
return true;
//cout<<”true”<< endl;
}
};

int main()
{
string a = “[a+b*(5-4)]{x+b+b({1+2)}}”;
ChkExpression ce;
bool b = ce.chkLegal(a);
cout << b<< endl;
return 0;
}