HDU 1274 展开字符串 (递归+string类)

题目链接:HDU 1274 展开字符串

中文题。

左括号进入DFS函数,右括号return到上一层。

注意return回去的是这个一层递归中的括号中的字母串。

AC代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
using namespace std;
char str[300];
bool vis[300];
int len;
string dfs(int pos)
{
	int i,k;
	int num=0;
	string ans="";
	string temp="",h="";
	for(i=pos;i<len;i++)
	{
		if(!vis[i])
		{
			vis[i]=true;
			if(str[i]>='0' && str[i]<='9')
			{
				num=num*10+str[i]-'0';
				continue;
			}
			if(str[i]>='a' && str[i]<='z')
			{
				if(num==0)
					num=1;
				for(k=0;k<num;k++)
					temp+=str[i];
				num=0;
			}
			if(str[i]=='(')
			{
				ans+=temp;
				h=dfs(i+1);
				if(num==0)
					num=1;
				for(k=0;k<num;k++)
					ans+=h;
				temp="";
				num=0;
			}
			if(str[i]==')')
			{
				ans+=temp;
				return ans;//这一层的括号中的字母返回到上一层
			}
		}
	}
	ans+=temp;
	return ans;
}
int main()
{
	int t,i,j;
	string out;
	while(scanf("%d",&t)!=EOF)
	{
		while(t--)
		{
			memset(vis,false,sizeof vis);
			scanf("%s",str);
			len=strlen(str);
			out=dfs(0);
			cout<<out<<endl;
		}
	}
	return 0;
}

/*
100
3(ab)
1(1a2b1(ab)1c)
3(ab2(4ab))
ababa
ab3(cd)2e
3((ab))
3(3(ab))
3(3(ab)2(cd))
1a1a
1b
*/
时间: 2024-10-10 22:31:04

HDU 1274 展开字符串 (递归+string类)的相关文章

HDU 1274 展开字符串

在纺织CAD系统开发过程中,经常会遇到纱线排列的问题. 该问题的描述是这样的:常用纱线的品种一般不会超过25种,所以分别可以用小写字母表示不同的纱线,例如:abc表示三根纱线的排列:重复可以用数字和括号表示,例如:2(abc)表示abcabc:1(a)=1a表示a;2ab表示aab;如果括号前面没有表示重复的数字出现,则就可认为是1被省略了,如:cd(abc)=cd1(abc)=cdabc;这种表示方法非常简单紧凑,也易于理解:但是计算机却不能理解.为了使计算机接受,就必须将简单紧凑的表达方式展

hdu 1274 展开字符串 (简单dfs)

http://acm.hdu.edu.cn/showproblem.php?pid=1274 思路: 找到匹配的区间 之后dfs #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> using namespace std; char str[300]; void dfs(int l,int r) { int i,j,k;

杭电acm 1274展开字符串

原题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1274 展开字符串 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3355    Accepted Submission(s): 1619 Problem Description 在纺织CAD系统开发过程中,经常会遇到纱线排列的问题.该问题

全面深入介绍C++字符串:string类

http://blog.csdn.net/liuliming3000/article/details/1809385 1 从C到C++ string类 2 string类的构造函数 3 string类的字符操作 4 string的特性描述 5 string类的输入输出操作 6 string的赋值 7 string的连接 8 string的比较 9 string类的查找函数 10 string类的替换函数 11 string类的插入函数 12 string类的删除函数 13 string类的迭代器

C#数据结构和算法-字符串、String 类和StringBuilder类

*本文为摘抄笔记* Preface当程序需要对String对象进行许多改变时会用到StringBuilder类.因为字符串和String对象都是不可改变的,而StringBuilder对象则是易变的.String类不可变,就意味着每次对象进行改变时都需要创建一个新的对象副本.如果在创建长的字符串,或者是对相同对象进行许多改变,那么就应该用StringBuilder类来代替.StringBuilder对象是可变的,性能会更好. 字符串是字符的序列,可以包含字母.数字和其他符号.C#语言中,用双引号

C++字符串和string类介绍

一.C风格字符串 ◆ 1.字符串是用字符型数组存储的,字符串要求其尾部以'\0'作为结束标志.如:    char string[ ]="C++ programming language";用sizeof来测string长度为25个字节,而实际串本身长度(含空格)为24个字节,多出来的一个就是串结束符'\0'(含0). ◆ 2.指针与字符串    char *pstr="C++ is a object_oriented language";这里绝不是建立了一个字符串

字符串排序--string类的使用

最近帮他们做了一个简单的c++的题目,以前做过,当时是借鉴的别人的代码,现在也忘得差不多了,不过思路还有,现在正好可以再温习一下. 题目要求如下: 先输入你要输入的字符串的个数.然后换行输入该组字符串.每个字符串以回车结束,每个字符串不多于一百个字符. 如果在输入过程中输入的一个字符串为“stop”,也结束输入. 然后将这输入的该组字符串按每个字符串的长度,由小到大排序,按排序结果输出字符串.如果存在多个字符串长度相同,则按照原始输入顺序输出. 输入格式: 字符串的个数,以及该组字符串.每个字符

【HDOJ】1274 展开字符串

栈的应用,需要注意括号前可能没有数字的情况. 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <iostream> 5 #include <stack> 6 #include <string> 7 using namespace std; 8 9 #define MAXN 300 10 #define isdigit(c) (c>=

C 风格字符串、string 类要点总结

1. C风格字符串 1.1 其它 头文件<cstring> 特殊性质:C风格字符串以空字符\0结尾 1.2 读取一行的区别 1.2.1 cin.getline(array1,n,char) 参数1:存入的数组名字:参数2:要读取的字符数:参数3:可选参数,用所输入的char字符替代\n作为读取结束标记,并把后续可能遇到的\n作为常规字符读取. 功能:读到换行符后边结束,并把'\n'替换为'\0',把读取到的字符串储存到name中 遇到文件结尾设置eofbit,遇到流被破坏(如设备故障)时设置b