TAG- 算法 − 【模拟】、思维 − 【类括号匹配】 算法 - 【模拟】、思维 - 【类括号匹配】 算法−【模拟】、思维−【类括号匹配】时间复杂度- O ( N ) O(N) O(N)
//
#include <bits/stdc++.h>
using namespace std;
// #define int long long
void solve() {
int n;
scanf("%d", &n);
string s1, s2;
cin >> s1 >> s2;
bool FA = 0, FB = 0;
int x = 0, y = 0;
for (int i = 0; i < n; i++) {
FA |= (s2[i] == 'A');
if (s1[i] != s2[i]) {
x = i;
break;
}
}
for (int i = n - 1; i >= 0; i--) {
FB |= (s2[i] == 'B');
if (s1[i] != s2[i]) {
y = i;
break;
}
}
// 不是标志不存在就否定 某些情况下只能用上一个标志 甚至不用
int ans = 0, cntA = 0;
for (int i = x; i <= y; i++) {
if (s1[i] != s2[i]) {
// 模拟括号匹配
if (s2[i] == 'A') {
cntA++;
} else {
if (cntA) cntA--, ans++;
else {
if (FA) ans++;
else {
printf("-1\n"); //
return ;
}
}
}
}
}
if (FB) {
printf("%d\n", ans + cntA);
} else {
printf("-1\n");
}
}
signed main() {
int t = 1;
// scanf("%d", &t);
while (t--) solve();
return 0;
}
实现细节
- `
参考示意图
-
`
参考链接
作者 | 乐意奥AI
该篇文章介绍了一种使用模拟方法解决类括号匹配问题的算法,针对给定的两个字符串s1和s2,计算满足条件的子串中A字符的数量。时间复杂度为O(N)。
4178

被折叠的 条评论
为什么被折叠?



