题目:输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串s。例如,abcde可以得到bce,但无法得到dc。
以下是我的代码:
#include<stdlib.h>
#include<string.h>
#define maxn 11000
char s[maxn], t[maxn];
int p[maxn];
int main()
{
int lens, lent;
scanf_s("%s", s, maxn);
scanf_s("%s", t, maxn);
lens = strlen(s);
lent = strlen(t);
int flag = 1, flag1 = 0, flag2 = 0;/*我的基本思路就是分以下三种情况考虑*/
if (lens > lent)printf("can not");
if (lens == lent)
{
for (int i = 0;i < lens;i++)
{
if (s[i] != t[i]) { flag = 0; break; }
else flag = 1;
}
if (flag)printf("can");
else printf("can not");
}
if (lens < lent)
{
for (int i = 0;i < lens;i++)
{
for (int k = 0;k < lent;k++)
{
if (s[i] == t[k])
{
flag1 = 1;
break;
}
else flag1 = 0;
}
if (!flag1)
{
printf("can not");
system("pause");
return 0;
}
}
if (flag1)/*如果s中的字符都能在t中找到,重字符按重数算*/
{
int j = 0;
for (int x = 0;x < lens;x++)
{
for (int y = 0;y < lent;y++)
{
if (s[x] == t[y])
{
p[j] = y;
break;
}
}
j++;
}
for (j = 0;p[j];j++)
{
if (p[j] < p[j + 1])/*如果符合那么数组p中的数就应该从小到大排列*/
flag2 = 1;
else
{
flag2 = 0;break;
}
}
if (flag2)printf("can ");
else printf("can not");
}
}
system("pause");
return 0;
}