时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个只包含括号和小写字母的字符串S,例如S="a(bc(de)fg)hijk"。

其中括号表示将里面的字符串翻转。(注意括号可能嵌套)

请你输出翻转之后的字符串。

输入

字符串S。

对于50%的数据,|S| ≤ 1000

对于100%的数据, |S| ≤ 5000000

输出

输出反转后的字符串(不带括号)。

样例输入
a(bc(de)fg)hijk
样例输出
   agfdecbhijk

大意:给出一个字符串,里面有合法的小括号,小括号内的字符串反转,输出最后的序列(去掉括号)

解析:正如我们看到括号配对的联想,这题就是一个栈或者说递归,考场上不知道为何50分暴力也写错了~~~

正解:首先将括号配对(用两个数组分别记录左括号对应右括号的的位置 和 右括号对应左括号的位置)
然后就开始正序遍历,遇到普通非括号字符直接输出,遇到左括号,假装反转括号内的字符(添加rev标记并进入下次递归)
如果有rev标记,逆序遍历,遇到普通非括号字符直接输出,遇到右括号,假装反转括号内的字符(去除rev标记并进入下次递归)
就这么愉快的结束了,不过评测姬如果是windows的话怕是会爆栈,可以考虑加个手工栈。
 /*
Welcome Hacking
Wish You High Rating
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<string>
using namespace std;
int read(){
int xx=,ff=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')ff=-;ch=getchar();}
while(ch>=''&&ch<=''){xx=(xx<<)+(xx<<)+ch-'';ch=getchar();}
return xx*ff;
}
const int maxn=;
int N,stack[maxn],tp,Prev[maxn],Next[maxn];
char s[maxn];
void dfs(int st,int en,bool rev){
if(!rev){
for(int i=st;i<=en;i++){
if(s[i]!='(')
printf("%c",s[i]);
else{
dfs(i+,Next[i]-,);
i=Next[i];
}
}
}
else{
for(int i=en;i>=st;i--){
if(s[i]!=')')
printf("%c",s[i]);
else{
dfs(Prev[i]+,i-,);
i=Prev[i];
}
}
}
}
int main(){
//freopen("in","r",stdin);
//freopen("out","w",stdout);
gets(s);
N=strlen(s);
for(int i=;i<N;i++){
if(s[i]=='(')
stack[++tp]=i;
else if(s[i]==')'){
Next[stack[tp]]=i;
Prev[i]=stack[tp];
tp--;
}
}
dfs(,N-,);
return ;
}

仍然是高仿某位大神的代码,超好背的呢!看了一遍,就默写出来AC了呢!


hihocoder 1671 反转子串的更多相关文章

  1. HiHoCoder1671 : 反转子串([Offer收割]编程练习赛41)(占位)

    描述 给定一个只包含括号和小写字母的字符串S,例如S="a(bc(de)fg)hijk". 其中括号表示将里面的字符串翻转.(注意括号可能嵌套) 请你输出翻转之后的字符串. 输入 ...

  2. 翻转子串 牛客网 程序员面试金典 C++ Python

    反转子串 牛客网 程序员面试金典 C++ Python 题目描述 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串.请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查 ...

  3. 336-Palindrome Pairs

    336-Palindrome Pairs Given a list of unique words, find all pairs of distinct indices (i, j) in the ...

  4. 14. Reverse Linked List II

    Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass. F ...

  5. [Offer收割]编程练习赛41

    比赛日程安排 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #incl ...

  6. JavaScript 实现回文解码

    题目也是源自今日头条前端工程师笔试题.题目描述: 现在有一个字符串,你要对这个字符串进行 n 次操作,每次操作给出两个数字:(p, l) 表示当前字符串中从下标为 p 的字符开始的长度为 l 的一个子 ...

  7. Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解

    Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全   Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...

  8. hihocoder #1032 : 最长回文子串 Manacher算法

    题目链接: https://hihocoder.com/problemset/problem/1032?sid=868170 最长回文子串 时间限制:1000ms内存限制:64MB 问题描述 小Hi和 ...

  9. 【poj1226-出现或反转后出现在每个串的最长公共子串】后缀数组

    题意:求n个串的最长公共子串,子串出现在一个串中可以是它的反转串出现.总长<=10^4. 题解: 对于每个串,把反转串也连进去.二分长度,分组,判断每个组. #include<cstdio ...

随机推荐

  1. LAMP配置课程基础知识详解

    听了一天的课程,我本人对这个还是很感兴趣的. [root@localhost~]#     root 用户名 localhost 本地 ~  家目录 不同用户不同 #当前用户是管理员 $当前用户是普通 ...

  2. UVM基础之--------uvm_root

    uvm_root 是uvm的顶层实例扮演了一个top-level and phase controller 的作用,对于component来说.该类不需要用户实例化,他是一个自动实例化了的类,用户直接 ...

  3. 搜索条件两个时间,通过php数组排序,保证select语句between时间 前小后大

    //搜索条件两个时间,通过数组排序,保证select语句between时间 前小后大 $sort_array=[$_POST['clockDate1'],$_POST['clockDate2']]; ...

  4. IF ERRORLEVEL 和 IF %ERRORLEVEL% 区别

      IF ERRORLEVEL 1 ( command )    与  IF %ERRORLEVEL%  LEQ 1 ( command  )  等效 也就是 ERRORLEVEL 1 等效于 &qu ...

  5. DAMA

    无论是小数据时代还是大数据时代,数据治理都是个非常重要的工作,数据质量问题是个非常普遍的问题.对于传统企业来说,核心业务还是流程驱动的,需要而且有条件把数据做准确,这就需要在数据管理上面下功夫. 介绍 ...

  6. (转) 基于Arcgis for Js的web GIS数据在线采集简介

    http://blog.csdn.net/gisshixisheng/article/details/44310765 在前一篇博文“Arcgis for js之WKT和geometry转换”中实现了 ...

  7. C# 调用指定打印机 (并不是默认)

    this.printDocument1.PrinterSettings.PrinterName = "Microsoft XPS Document Writer"; this.pr ...

  8. cocos自动图集

    对于图像资源,为什么要用图集,cocos官网的解释: 1.合成图集时会去除每张图片周围的空白区域,加上可以在整体上实施各种优化算法,合成图集后可以大大减少游戏包体和内存占用2.多个 Sprite 如果 ...

  9. 国密SSL证书免费试用申请指南

    沃通提供国密SSL证书免费申请试用服务,一次申请可同时签发SM2/RSA双算法证书,试用周期1个月,用于测试国密SM2 SSL证书的运行效果和SM2/RSA双证书部署效果. 试用产品:SM2/RSA双 ...

  10. 使用Oracle函数在创建表的时候自动加入生成的流水号 生成格式是:前缀+年月日+00000

    CREATE OR REPLACE FUNCTION fn_no_make(v_type VARCHAR2, v_number_col VARCHAR2, v_table_name VARCHAR2) ...