给两串字符,字符长度在1~200000之间,只能删它们的开头字符,每删一次算一步,输出让字符串相等的最少步数.
我第一次写这个题时,看到这个长度就想到了大数,然后试图先将它们对齐。但是在实际过程中,我感觉代码复杂程度比较高,又仔细看了一遍题目,最终思想如下:
直接比较末尾元素,用sum表示a+b的字符数,判断两个字符串的末尾是否相等,相等sum-=2.
最终输出sum.
但在实际过程中又遇到了一些问题,这里将问题公示:
第一个问题:若不限制数组的下标范围,数组会越界访问
第二个问题,虽然题目说给出的字符在1~200000之间,但会字符串类型会自动在末尾增加一个结束'\0',所以数组大小应该>=200001
代码如下:
#include <stdio.h>
#include <string.h>
char S[200001];
char T[200001];
int main()
{
int s, t, sum;
scanf("%s\n%s", S, T);
s = strlen(S);
t = strlen(T);
sum = s + t;
for (; S[s - 1] == T[t - 1]&&s>0&&t>0; s--, t--)
{
sum -= 2;
}
printf("%d\n", sum);
return 0;
}