题目:
题解
1.链表思路,作者的代码着实强,琢磨老半天orz,就不附代码了,很多贴都有
2.看好久,觉得很难完全掌握,另寻他路:首个 “[” 意味着输出从头开始,我们称之为“格外的部分”,再遇到 “[” 意味着开始另一段格外的部分,遇到 “]” 则意味着这一块格外的输出结束,并开始正常的输出。开字符串数组存下每组格外的输出,倒序输出格外部分再输出正常的部分即可,AC代码如下(30ms)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
const int maxn = 100000+5;
char t[maxn];
string r;
string s[100000];
int main()
{
while(scanf("%s",t)==1)
{
int f = 0, u = -1; /* 0 正常的部分 1 格外的部分 */
for(int i=0;t[i];i++)
{
char ch = t[i];
if(ch=='[') {u++;f = 1;continue;}//再次“格外”
if(ch==']') {f = 0;continue;}//开始正常的输出
if(f==0) r+=ch;
else s[u]+=ch;
}
for(int i=u;i>=0;i--)//倒序输出“格外的部分”
{
cout << s[i];
s[i] = "";//记得清空哦
}
cout << r << endl;r = "";
}
return 0;
}
3.从网上看到其他做法也很方便
以下代码出自此处
#include <iostream>
#include <list>
#include <string>
using namespace std;
int main()
{
list<char> l;
list<char>::iterator it=l.begin();
string str;
while(cin>>str)
{
l.clear();
for(int i=0;i<str.size();i++)
{
if(str[i]=='[') it=l.begin();
else if(str[i]==']') it=l.end();
else l.insert(it,str[i]);
}
for(it=l.begin();it!=l.end();it++)
cout<<(*it);
cout<<endl;
}
}
————————————————
版权声明:本文为CSDN博主「leekerian」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leekerian/article/details/86702277