A. Two Screens
分析
当找到第一个不同的字符时,通过 i != 0
来判断是否有公共前缀,计算操作次数并退出循环。
如果没有遇到不同字符,则再通过 !isDifferent
处理。
//A Two Screens Written By Akitama
#include <iostream>
#include <cstring>
#define akitama return 0
using namespace std;
int main() {
int q;cin >> q;
int ans[q];
int tmp = q;
while (q--) {
char c1[105], c2[105];
cin >> c1 >> c2;
int len1 = strlen(c1), len2 = strlen(c2);
int min_len = len1 < len2 ? len1 : len2;
int max_len = len1 > len2 ? len1 : len2;
bool isDifferent = false;
int op = 0;
for (int i = 0; i < min_len; i++) {
if (c1[i] != c2[i]) {
i != 0 ? ans[tmp - q - 1] = (i + 1 + len1 - i + len2 - i) : ans[tmp - q - 1] = (len1 + len2);
isDifferent = true;
break;
}
}
if (!isDifferent) {
len1 + len2 < max_len + 1 ? ans[tmp - q - 1] = len1 + len2 : ans[tmp - q - 1] = max_len + 1;
}
}
for (int i = 0; i <= tmp - 1; i ++) {
cout << ans[i] << endl;
}
akitama;
}
赛后反思&代码优化
在时间复杂度和代码简洁性上还有一些可以改进的地方:避免重复计算字符串长度、简化分支判断和即时输出,提升代码的效率和可读性。
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int q;cin >> q;
while (q--) {
char c1[105], c2[105];
cin >> c1 >> c2;
int len1 = strlen(c1), len2 = strlen(c2);
int lcp = 0;
while (lcp < len1 && lcp < len2 && c1[lcp] == c2[lcp])
lcp++;
if (lcp =\= 0)//网站问题 此处是正常的等于号
cout << len1 + len2 << endl;
else
cout << len1 + len2 - lcp + 1 << endl;
}
return 0;
}
评论(已关闭)
评论已关闭