博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
#587. 天天和不可描述
阅读量:5291 次
发布时间:2019-06-14

本文共 1481 字,大约阅读时间需要 4 分钟。

【题目描述】:

天天和()是好朋友,然而总是唱反调。对于一个有() 的字符串,天天总是会把()内的所有东西都倒过来读。

比如对于字符串abc(def) ,天天看到的就是abcfed 。

括号里面可能是空的,也有可能套有多个括号,比如说abc(hello)(world)lcy()x(owq(zrt)),天天看到的就是abcollehdlrowlcyxzrtqwo 。

因为(owq(zrt))首先变成了(trz)qwo ,接下来变成了zrtqwo ,zrt 被反转了两次,所以天天看到的还是zrt。

现在给你一个字符串,问你天天看到的是什么样子的?

【输入描述】:

一行一个字符串,表示原始的字符串。保证字符串内只有小写字母和(以及)组成。保证括号总是配对的。

【输出描述】:

一行一个字符串,表示天天看到的字符串。

【样例输入1】:

abc(hello)(world)lcy()x(owq(zrt))

【样例输出1】:

abcollehdlrowlcyxzrtqwo

【样例输入2】:

(y(g(el)da)nis)

【样例输出2】:

singleday

【样例输入3】:

mian()

【样例输出3】:

mian

【时间限制、数据范围及描述】:

时间:1s 空间:256M

对于10% 的数据,保证只出现一对括号,字符串长度小于100,000。

对于另外30% 的数据,保证字符串长度小于100。

对于另外40% 的数据,保证字符串长度小于100,000。

对于剩余的20% 的数据,保证字符串长度小于500,000。

 

 

#include
#include
#include
#include
#include
#include
#include
using namespace std;int a[500610],b[500610],j;char s[500610];stack
q;void work(int l,int r,int t){ if(t%2==0){ for(int i=l;i<=r;i++){ if(s[i]!='('&&s[i]!=')'){ printf("%c",s[i]); } else if(s[i]=='('){ work(i+1,a[i]-1,t+1); i=a[i]; } } return; } if(t%2==1){ for(int i=r;i>=l;i--){ if(s[i]!='('&&s[i]!=')'){ printf("%c",s[i]); } else if(s[i]==')'){ work(b[i]+1,i-1,t+1); i=b[i]; } } } return;}int main(){ scanf("%s",s+1); int len=strlen(s+1); for(int i=1;i<=len;i++){ if(s[i]=='('){ q.push(i); } if(s[i]==')'){ a[q.top()]=i; b[i]=q.top(); q.pop(); } } work(1,len,0); return 0;}

  

转载于:https://www.cnblogs.com/xiongchongwen/p/11561141.html

你可能感兴趣的文章
Ubuntu sudo 出现 is not in the sudoers file解决方案
查看>>
内存地址对齐
查看>>
看门狗 (监控芯片)
查看>>
#ifndef #define #endif
查看>>
卷积神经网络知识链接
查看>>
java简介
查看>>
浮动、定位
查看>>
js细节
查看>>
SQL语句大全
查看>>
java中的变量
查看>>
css背景样式
查看>>
JavaScript介绍
查看>>
js中函数与对象的使用
查看>>
Date对象及toString方法
查看>>
正则表达式
查看>>
异常及throw、与throws的介绍
查看>>
js数组
查看>>
java运算符
查看>>
mysql简介
查看>>
java数组
查看>>