2021-01-03

【牛客网】压缩算法C++解法

string decode(string s)
{
	int x=-1,y=-1,z=-1;
	int times;
	string sub,result;
	
	for(int i=0;i<s.length();++i)
	{
		if (s[i]=='[')    //左括号 
			x = i;
		else if (s[i]=='|')      
			y = i; 
		else if (s[i]==']')  //右括号 
		{ 
			z = i;
			break;
		}			
	}
	
	if (x!=-1 && y!=-1 && z!=-1)
	{
		times = atoi(s.substr(x+1,y-x-1).c_str()); 
		sub = s.substr(y+1,z-y-1);
		string ss="";
		for (int i=0;i<times;++i)   //重复字段
			ss += sub;
		
		result = s.substr(0,x) + ss + s.substr(z+1,s.length());
		return decode(result);
	}
	return s;
}

 

 

解法思想:x,y,z始终指向当前字符串最内层需要解压缩的相应位置,将解压缩后字符串作为下次递归的输入。

如输入"[3|B[4|A]]"

 第一次递归返回结果:[3|BAAAA]

 第二次递归返回结果:BAAAABAAAABAAAA

 第三次递归返回结果:BAAAABAAAABAAAA (不进入递归,直接返回)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值