xiaoyang111 @ 2023-07-10 10:08:54
c++17语言
#include <iostream>
using namespace std;
int main(){
string str;
getline(cin,str);
for (const auto &item : str){
if (item=='[' || item==']'){
cout<<"[]";
}
if (item=='(' || item==')'){
cout<<"()";
}
}
return 0;
}
最稳的做法为什么还是56分
第一行测试点全对,第二行测试点全错。还挺有对比性
by xiaoyang111 @ 2023-07-10 10:09:23
题目也没有说长度限制啊
by xiaoyang111 @ 2023-07-10 10:14:28
再贴一个我的56pts代码
#include <iostream>
#include <vector>
using namespace std;
bool f(const vector<int> &a,const int b){//返回b整数是否存在与a里
for (const auto &item : a){
if (item==b){
return true;
}
}
return false;
}
int main(){
string str;
vector<int> a1;//未匹配的左小括号的下标
vector<int> a2;//未匹配的左中括号的下标
vector<int> b1;//未匹配的右小括号的下标
vector<int> b2;//未匹配的右中括号的下标
/*------------↑定义↑-------------*/
getline(cin,str);
/*------------↑输入↑-------------*/
for (int i=0;i<str.size();++i){
char c=str[i];
if (c=='('){//左小括号直接入
a1.emplace_back(i);
}
if (c=='['){//右小括号直接入
a2.emplace_back(i);
}
if (c==')'){
if (a1.size()==0){//没有可以匹配的左小括号
b1.emplace_back(i);
}else{//匹配到了
int temp=a1[a1.size()-1];
bool flag=true;
for (int k=temp+1;k<i;++k){
if (str[k]=='[' || str[k]==']'){
flag=false;
break;
}
}
if (flag){
a1.pop_back();
}else{
b1.emplace_back(i);
}
}
}
if (c==']'){
if (a2.size()==0){//没有匹配到左中括号
b2.emplace_back(i);
}else{//匹配到了
int temp=a2[a2.size()-1];
bool flag=true;
for (int k=temp+1;k<i;++k){
if (str[k]=='(' || str[k]==')'){
flag=false;
break;
}
}
if (flag){
a2.pop_back();
}else{
b2.emplace_back(i);
}
}
}
}
/*------------↑操作↑-------------*/
for (int i=0;i<str.size();++i){
char c=str[i];
if (c=='('){
cout<<c;
if (f(a1,i)){
cout<<")";
}
}else if (c==')'){
if (f(b1,i)){
cout<<"(";
}
cout<<c;
}else if (c=='['){
cout<<c;
if (f(a2,i)){
cout<<"]";
}
}else if (c==']'){
if (f(b2,i)){
cout<<"[";
}
cout<<c;
}else{
cout<<c;
}
}
/*------------↑输出↑-------------*/
return 0;
}
by gao_shou @ 2023-08-01 16:16:32
我也是
by ordoki @ 2023-08-02 15:12:00
我也是
by dingjingyi @ 2023-08-07 22:08:44
我也是
by wangyutian578 @ 2023-08-12 15:41:34
我也是