问题描述
问题:- 给定一个仅包含字符 '(',')','{','}','[' 和 ']' 的字符串 s,确定输入字符串是否有效。
输入字符串在以下情况下有效: 1.开括号必须用同类型的括号封闭。 2.左括号必须以正确的顺序关闭。
我的解决方案:- 我是 STL 的新手并试图解决这个问题,我使用了地图和字符向量。 (){}[] 或 ()]]{} 等正常条件的输出结果是正确的。但是,像 {[]} 这样的大案子并不是真的,因为我无法为这些类型的案子编造我的逻辑。这是我的一段代码:-
#include<algorithm>
#include<string>
#include<bits/stdc++.h>
using namespace std;
void check(vector<char> &v){
//assigning unique keys the numers
map<char,int> strin;
strin['('] = 1;
strin[')'] = -1;
strin['['] = 2;
strin[']'] = -2;
strin['{'] = 3;
strin['}'] = -3;
int strsize = v.size();
int sum = 0;
int flag = 1;
int k=0;
for(int i=0;i<v.size();++i){
if(strin[v[i+1]] == -strin[v[i]]){
sum = sum + 1;
}
else if(strin[v[i+2]]== -strin[v[i+1]]){
sum = sum+1;
}
}
cout<<sum<<endl;
if(sum==strsize){
cout<<"true";
}
else{
cout<<"false";
}
}
int main(){
string str;
cin>>str;
vector<char> v(str.begin(),str.end()); //splitting string into a vector of Char
check(v);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)