)
题目链接https://codeforces.com/contest/2267/problem/A题目大意给你一个长度为n的字符串s和一个特定字符c你每次可以花费1枚硬币把字符串中的任意一个字符修改为c求把字符串s变成回文串最少需要花费多少枚硬币题目思路我们可以定义2个指针一个在头一个在尾向中间靠拢由于是回文串比如abaccc都是回文串那么s[l]s[r],如果s[l]!s[r],那么看当前所指2个字符是否和c相等如果不同就变为c以达到最小花费时间复杂度O(n)代码如下#include bits/stdc.h using namespace std; // #define int long long #define endl \n // https://codeforces.com/contest/2267/problem/A // Div.2 CF 1123A题(双指针字符串贪心) /* 题目大意给你一个长度为n的字符串s和一个特定字符c 你每次可以花费1枚硬币把字符串中的任意一个字符修改为c 求把字符串s变成回文串最少需要花费多少枚硬币 题目思路我们可以定义2个指针一个在头一个在尾向中间靠拢 由于是回文串比如abaccc都是回文串那么s[l]s[r],如果s[l]!s[r], 那么看当前所指2个字符是否和c相等如果不同就变为c以达到最小花费 */ //时间复杂度O(n) void solve() { int n; char c; string s; cin n c s; int l 0, r n - 1;//初始化左右指针位置 int cnt 0; for (; l n / 2; l, r--)//左加右减向中间靠 { if (s[l] ! s[r])//如果不同 { if (s[l] ! c)//和c不同 { cnt; } if (s[r] ! c) { cnt; } } } cout cnt endl; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin T; while (T--) { solve(); } return 0; }