zoukankan      html  css  js  c++  java
  • 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
    */


  • 相关阅读:
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5106599.html
Copyright © 2011-2022 走看看