题目描述:
解题思路:
-
从左到右扫描第一条 DNA 序列和第二条 DNA 序列的每一个位置,检查它们是否互补。
-
如果某个位置不互补,我们需要寻找第二条 DNA 序列中后续位置的碱基,看是否可以通过交换使这两个位置都互补。如果可以,我们就进行交换。
-
如果在后续位置找不到可以交换的碱基,说明这个位置只能通过替换来满足要求。因为每个位置只能修改一次,所以我们不能把不配对的碱基交换到当前位置作为中转站,则只能进行修改。
-
每次交换或替换,操作计数器增加 1。
-
最后输出操作计数器的值。
题解 :
#include<bits/stdc++.h>
using namespace std;map<char, int> pp = {{'A', 0}, {'C', 1}, {'G',2}, {'T',3}};//pp['A'] = 0int main()
{int n; cin >> n;string a,b;cin >> a >> b;int cnt = 0;for(int i = 0; i < n; i++){if(pp[a[i]] + pp[b[i]] != 3)//不等于3不互补{for(int j = i+1; j < n; j++){if(pp[a[i]] + pp[b[j]] ==3 && pp[a[j]] + pp[b[i]] == 3)//是pp[a[i]]不是pp[i]{swap(b[j], b[i]);//交换b互补两个位置break;}}cnt++;}}cout << cnt;return 0;
}