(题目描述略)
对于本题,最自然的解法莫过于使用链表解决。然而,这样一来不仅使得程序代码复杂度大为增加,而且程序的空间效率也难以保证。事实上,我们可以用搜索解决该问题,代码如下:(仅供参考)
#include"iostream"
#include"stdio.h"
#include"string.h"
using namespace std;
char s[100005],t[100005];
int main()
{
int len;
while(gets(s))
{
memset(t,'\0',sizeof(t));
len=strlen(s);
for(int i=len-1;i>=0;i--)
if(s[i]=='[')
cout<<t+i+1;
else if(s[i]!=']')
t[i]=s[i];
cout<<t;
for(int i=0;i<len;i++)
if(s[i]==']')
cout<<t+i+1;
printf("\n");
}
return 0;
}
算法思路:对于一组输入数据,将其以”[“和”]”为界分割成若干个以”[“或”]”为开头的子字符串,则输出结果为从后向前以”[“为开头的字符串、第一个字符串(可为空)和从前向后以”]”为开头的字符串。
算法效率:时间复杂度正比于总输入字符数,空间效率正比于单次输入字符数的最大值。