题目描述 给出一个字符串,有两种操作: 花费 B,修改串的一个字母 花费 A,把串的第一位放到最后一位 ,修改串的一个字母 求把原串变成回文串的最小代价 输入格式 先输入 n,A,B; ,第二行字符串S
输出格式: 输出答案 样例 #1
样例输入 #1
5 1 2
rrefa
样例输出 #1
3
样例解释 首先,支付 2日元费用执行第二种操作一次:让 i=5,将 S5替换为 e。现在, S变为 rrefe。 然后,支付 1日元费用执行第一种操作一次。现在, S变为 refer,这是一个回文字符串。 因此,你可以以 3 日元的代价使 S 成为一个回文字符串。由于你不能用2日元或更少的代价让 S 成为一 个回文字符串,所以答案是3 。 我的代码:
#include <iostream>
#include <string>
using namespace std;
int minPalindromeCost(string s, int A, int B) {
int left = 0;
int right = s.length() - 1;
int cost = 0;
while (left <= right) {
if (s[left] == s[right]) {
left++;
right--;
} else {
if (A < B) {
cost += A;
s[left] = s[right];
left++;
} else {
cost += B;
s.insert(s.begin() + right + 1, s[left]);
left++;
right++;
}
}
}
return cost;
}
int main() {
int n, A, B;
string s;
cin >> n >> A >> B;
cin >> s;
int minCost = minPalindromeCost(s, A, B);
cout << minCost << endl;
return 0;
}