Problem 2183 简单题
Accept: 137 Submit: 636
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
现在有一些被简单压缩的字符串,例如:a[120]代表120个a。对于字符串acb[3]d[5]e相对于acbbbddddde
现在给你两个字符串cString, nString.一个是被压缩过的字符串,另一个没有被压缩。
求nString是否为cString的子串,如果是输出True,否则输出False.cString的长度clen的范围是0
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
#define inf 0xffffff
#define maxn 1005
struct Char
{
char c;
int x;
};
char m[maxn];
Char a[maxn],b[maxn];
int t1,t2;
int main()
{
while(~scanf("%s",m))
{
for(int i = 0; i < maxn; i++){
a[i].x = b[i].x = 0;
}
t1 = t2 = 0;
int l = strlen(m);
for(int i = 0; i < l; i++){
if(m[i] == '['){
int sum = 0;
i++;
while(m[i] != ']'){
sum *= 10;
sum += m[i] - '0';
i++;
}
a[t1-1].x += sum - 1;
}
else {
a[t1].c = m[i];
if(a[t1].c == a[t1-1].c) t1--;
a[t1++].x += 1;
}
}
scanf("%s",m);
l = strlen(m);
for(int i = 0; i < l; i++){
if(m[i] == '['){
int sum = 0;
i++;
while(m[i] != ']'){
sum *= 10;
sum += m[i] - '0';
i++;
}
b[t2-1].x += sum;
}
else {
b[t2].c = m[i];
if(b[t2].c == b[t2-1].c) t2--;
b[t2++].x += 1;
}
}
int flag = false;
for(int i = 0; i < t1; i++){
for(int j = 0; j < t2; j++){
if( a[i + j].c == b[j].c){
if(j == t2 - 1){
if(a[i+j].x >= b[j].x) flag = true;
break;
}
if(j == 0){
if(a[i+j].x < b[j].x) break;
else continue;
}
//cout<<"j "<<j<<endl;
if(a[i+j].x != b[j].x) break;
}
else break;
}
}
/*
for(int i = 0; i < t1; i++)
cout<<a[i].c<<" ";
cout<<endl;
for(int i = 0; i < t1; i++)
cout<<a[i].x<<" ";
cout<<endl;
for(int i = 0; i < t2; i++)
cout<<b[i].c<<" ";
cout<<endl;
for(int i = 0; i < t2; i++)
cout<<b[i].x<<" ";
cout<<endl;
*/
if(flag) printf("True\n");
else printf("False\n");
}
return 0;
}
/*
s[3]c[3]d
ssscccd
s[3]c[3]d
sssccd
s[3]c[3]d
sscccd
s[3]c[3]d
ssccd
a[20]
aaa
a[2]
aaa
*/