当前位置:网站首页>awoo‘s Favorite Problem(优先队列)
awoo‘s Favorite Problem(优先队列)
2022-07-01 21:45:00 【山中一扶苏】
原题链接
题目描述
给你两个字符串s和t,长度都是n。两个字符串中的每个字符都是’a’, ‘b’或’c’。
在一个操作中,您可以执行以下操作之一:
选择s中出现的“ab”,将其替换为“ba”;
选择s中出现的“bc”,并将其替换为“cb”。
你可以执行任意数量的移动(可能是零)。 你能改变字符串s让它等于字符串t吗?
输入样例
5
3
cab
cab
1
a
b
6
abbabc
bbaacb
10
bcaabababc
cbbababaac
2
ba
ab
输出样例
YES
NO
YES
YES
NO
算法
(贪心 + 优先队列 + 模拟)
贪心策略:通过优先队列记录每个字母的下标,每次如果有可换的字母对则取最近的下标观察是否可以交换,没有则直接弹出该字母。
C++ 代码
时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <unordered_map>
#include <queue>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
ll a[N],s[N];
void solve()
{
int n;
cin >> n;
string s,t;
cin >> s >> t;
vector<int> v1(3,0),v2(3,0);
for (int i = 0;i < n;i ++ ) v1[s[i] - 'a'] ++;
for (int i = 0;i < n;i ++ ) v2[t[i] - 'a'] ++;
if (v1 == v2) {
priority_queue<int,vector<int>,greater<int>>a,b,c;
for(int i = 0;i < n;i ++ ) {
if(s[i] == 'a') a.push(i);
if(s[i] == 'b') b.push(i);
if(s[i] == 'c') c.push(i);
}
for (int i = 0;i < n;i ++ ) {
if (s[i] == t[i]) {
if (s[i] == 'a') a.pop();
else if (s[i] == 'b') b.pop();
else c.pop();
}else {
if (s[i] == 'a' && t[i] == 'b') {
if (!b.empty() && (c.empty() || b.top() < c.top())) {
int index = b.top();
b.pop();
swap(s[i],s[index]);
a.pop();
a.push(index);
continue;
}
}else if (s[i] == 'b' && t[i] == 'c') {
if (!c.empty() && (a.empty() || c.top() < a.top())) {
int index = c.top();
c.pop();
swap(s[i],s[index]);
b.pop();
b.push(index);
continue;
}
}
puts("NO");
return;
}
}
puts("YES");
}else puts("NO");
}
int main()
{
int t;
cin >> t;
while (t -- ) solve();
return 0;
}
边栏推荐
- Spark interview questions
- 指标陷阱:IT领导者易犯的七个KPI错误
- Design and practice of new generation cloud native database
- List announced | outstanding intellectual property service team in China in 2021
- [STM32] stm32cubemx tutorial II - basic use (new projects light up LED lights)
- 地图其他篇总目录
- AIDL基本使用
- [noip2013] building block competition [noip2018] road laying greed / difference
- Mysql——》Innodb存储引擎的索引
- What is the difference between PMP and NPDP?
猜你喜欢

13th Blue Bridge Cup group B national tournament

Microsoft, Columbia University | Godel: large scale pre training of goal oriented dialogue

Relationship and difference between enterprise architecture and project management

小 P 周刊 Vol.11

keras训练的H5模型转tflite

【直播回顾】战码先锋首期8节直播完美落幕,下期敬请期待!

【juc学习之路第9天】屏障衍生工具

Learning notes on futuretask source code of concurrent programming series

指标陷阱:IT领导者易犯的七个KPI错误

MySQL series transaction log redo log learning notes
随机推荐
Getting started with the lockust series
Using closures to switch toggle by clicking a button
Why must digital transformation strategies include continuous testing?
对象内存布局
详解JMM
Talking from mlperf: how to lead the next wave of AI accelerator
ICML2022 | 基于元语义正则化的介入性对比学习
【生态伙伴】鲲鹏系统工程师培训
91.(cesium篇)cesium火箭发射模拟
AirServer2022最新版功能介绍及下载
【目标跟踪】|单目标跟踪指标
"The silk road is in its youth and looks at Fujian" is in the hot collection of works in the Fujian foreign youth short video competition
Qtreeview+qabstractitemmodel custom model: the third of a series of tutorials [easy to understand]
linux下清理系统缓存并释放内存
【MySQL】索引的分类
plantuml介绍与使用
详解LockSupport的使用
The leader of the cloud native theme group of beacon Committee has a long way to go!
收到一封CTO来信,邀约面试机器学习工程师
GaussDB(DWS)主动预防排查