HDU 1274 递归拼接字符串
题目大意:
根据所给的数字,表示其相连的字符的输出个数,或是下一个括号中的所有字符的输出个数
每一个相互对应的 '(' 和 ')' 中的所有字母均作为一组数据处理
在每一次dfs过程中都处理好这样一个对应组中间的字符
再根据前面所带的数字k
循环k次输出自己要的数据
每次输出一个字母,因为无论多复杂的字符串都能够转化成最后只带一个数字和一个字母连接的形式,第38行代码有较详细解释
#include <cstring>
#include <cstdio> using namespace std; const int N = ;
char str[N];
int len;//表示str字符串的长度
/*将一组'('')'看作一次递归,而数字看作递归调用的次数*/
int dfs(int index)
{
int k , i;//k来表示前面标志的数字
/*一直到找到它对应的')'表示自己这一次递归打印结束*/
for(i = index ; i<len && str[i] != ')' ; i++){
k = ;
/*利用下面这个循环获得打印字母次数的k*/
while(str[i] - '' >= && str[i] - '' <= ){
//不是数字就退出循环
k = k * + (str[i] - '') ;
i++; //这里每成功访问到一个数字,那么为了访问下一个str[i]代表字母,就要不断往前加一
}
if(k == ) k = ; //表示前面没有数字表示,就默认为1 if(str[i] == '(')
{
int e;
/*因为后面不断putchar打印字母,这里每调用一次dfs,
就会把当前'('出发到对应')'结束的所有字母打印一遍,所以要调用k次打印k遍*/
while(k--)
/*因为你要继续接下来的操作,不能只传入i,因为str[i]对应的是括号,我们需从下一个点访问起,所以i++*/
e = dfs(i+); /*因为通过dfs会打印好所有( )中的字母,所以这里不用再管了,
下标移到执行完的e的位置,继续接下来的循环*/
i = e;
}
else{
/*因为最后无论字符串如何复杂都会转化成一个个一个数字连接一个字母的情况
如3(a),经过递归调用后也产生的是在if(str[i] == '(')调用3次
打印a , 这个a可以理解为1a,最后这个1a就进入了这个else中在
while中打印1次 , 又比如2a3bcd就能够理解为先打印了2a再下次进入
打印3b,再下一次1c,最后一次打印1d
*/
while(k--)
putchar(str[i]);
}
}
if(i < len) return i; //返回它的结束的括号位置的序号
else return len; //返回最后一个位置,表示所有都完成,不再继续递归
} int main()
{
//freopen("a.in" , "r" , stdin);
int T;
scanf("%d" , &T);
while(T--){
scanf("%s" , str);
len = strlen(str);
dfs();
puts("");
}
return ;
}
HDU 1274 递归拼接字符串的更多相关文章
- HDU 1274 展开字符串 (递归+string类)
题目链接:HDU 1274 展开字符串 中文题. 左括号进入DFS函数,右括号return到上一层. 注意return回去的是这个一层递归中的括号中的字母串. AC代码: #include<st ...
- 拼接字符串,生成tree格式的JSON数组
之前做的执法文书的工作,现在需要从C#版本移植到网页版,从Thrift接口获取数据,加载到对应的控件中 之前用的easyui的Tree插件,通过<ul><li><span ...
- 为什么 Java 8 中不再需要 StringBuilder 拼接字符串
为什么 Java 8 中不再需要 StringBuilder 拼接字符串 来源:codeceo 发布时间:2016-12-27 阅读次数:427 0 在Java开发者中,字符串的拼接占用资源高往往 ...
- knockoutJS学习笔记01:从拼接字符串到编写模板引擎
开篇 关于knockout的文章,园里已经有很多大神写过了,而且都写得很好.其实knockout学习起来还是很容易的,看看官网的demo和园里的文章,练习练习就可以上手了(仅限使用,不包含研究源码). ...
- Java使用占位符拼接字符串
大家知道,在C#编程中,可以用占位符来拼接字符串,用起来非常的方便. 特别是需要进行大量的参数拼接的时候,比如: Console.WriteLine(String.Format("该域名{0 ...
- razor 拼接字符串
在asp.net引擎中 拼接字符串可以这样写 <script src="~/script/<%=scriptname%>.js"></script&g ...
- 谈JavaScript组合拼接字符串的效率 --转载
JavaScript组合拼接字符串的效率.在脚本开发过程中,经常会按照某个规则,组合拼接出一个大字符串进行输出.比如写脚本控件时控制整个控件的外观的HTML标签输出,比如AJAX里得到服务器端的回传值 ...
- c++拼接字符串效率比较(+=、append、stringstream、sprintf)
转自:http://www.cnblogs.com/james6176/p/3222671.html c++拼接字符串效率比较(+=.append.stringstream.sprintf) 最近写的 ...
- 数据库(MSSQLServer,Oracle,DB2,MySql)常见语句以及问题(续1之拼接字符串)
上一篇文章http://www.cnblogs.com/valiant1882331/p/4056403.html写的太长了,所以就换了一篇,链接上一节继续 字符串的拼接 MySql中可以使用&quo ...
随机推荐
- [App Store Connect帮助]四、添加 App 图标、App 预览和屏幕快照(5)移除 App 预览或屏幕快照
您可以随时移除 App 预览,但仅可在 App 状态为可编辑时才能移除屏幕快照.要了解可编辑的状态,请前往 App 状态. 必要职能:“帐户持有人”职能.“管理”职能.“App 管理”职能或“营销”职 ...
- Odoo免费开源企业信息化平台助力企业成功
企业信息化变革之路 信息孤岛的真实由来 打开百度App,看更多图片 左边为当下企业现状,右边为Odoo的整体 企业信息孤岛的严重性,来自于企业的自身高速发展,企业以销售为生命主题围绕着客户会搭建一系列 ...
- 【原创】Eclipse实现图形化界面插件-vs4e
vs4e插件下载地址:http://visualswing4eclipse.googlecode.com/files/vs4e_0.9.12.I20090527-2200.zip 下载完成后,解压,然 ...
- 内联标签------------大多数XHTML可以表示为两种类型的标签:块标签(block tag)和内联标签(inline tag)
内联标签 <em> 强调,大部分浏览器渲染为斜体. <strong> 强调,大部分浏览器渲染为黑体. <sub> 下标 <sup> 上标 内联标签通常用 ...
- jQuery学习笔记(3)-操作jQuery包装集的函数
一.前言 在使用jQuery选择器获取到jQuery包装集后,我们就要对这些包装集进行各种操作 二.创建新的元素 1.使用HTMLDOM创建元素 (1)什么是DOM 当网页被加载时,浏览器会创建页面的 ...
- 专题五:TCP编程
前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来介绍下传输层协议——TCP协议,主要介绍下TCP协议的工作过程和基于TCP协议的一个简单的通信程序,下面就开始本专题的正文了. ...
- 重新学习Java——Java基本的程序设计结构(一)
最近在实验室看到各位学长忙于找工作的面试与笔试,深感自己的不足,决定重新好好学习一下<Java核心技术>这本书,曾经靠这本书走入Java的世界,但是也有很多的地方被我疏漏过去了,因此也是作 ...
- [ POI 2010 ] Antisymmetry
\(\\\) \(Description\) 给出一个长度为 \(N\) 的二进制串,定义一个子串是优秀的,当且仅当其正着看,和倒着按位取反后看结果是一样的,求整个串有多少个优秀的子串. \(N\le ...
- Android 仿微信调用第三方应用导航(百度,高德、腾讯)
实现目标 先来一张微信功能截图看看要做什么 其实就是有一个目的地,点击目的地的时候弹出可选择的应用进行导航. 大脑动一下,要实现这个功能应该大体分成两步: 底部弹出可选的地图菜单进行展示 点击具体菜 ...
- <a>标签的href、onclick属性
链接的 onclick 事件被先执行,其次是 href 属性下的动作(页面跳转,或 javascript 伪链接): 参考:https://www.cnblogs.com/happykakeru/ar ...