ExOJ 字符串转换 (Cpp)
这道题最开始的思路是先挑出字符串中个数最多的字符,然后都转为这个字符,但是未通过。这种思路错误之处可以通过手动模拟字符串 aabcdef 发现,转为a花费15,转为c花费12, 转为d花费11。所以需判定最佳字符然后计算花费,但是没找到判断的方法,只好用一个循环嵌套,枚举每个字符的花费,其复杂度为o(n^2)。
代码如下:
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
const int MAX = 1009;
int main() {
int T, cost[MAX] = {0};
scanf("%d", &T);
while (T > 0) {
char str[MAX];
scanf("%s", str);
int len = strlen(str);
for (int i = 0; i < len; i++) {
int st = str[i];
int c, t1, t2, spend = 0; //c为准换的ascii值
for (int j = 0; j < len; j++) {
c = str[j];
t1 = c - st;
t2 = st - c;
if (t1 < 0) t1 += 26;
if (t2 < 0) t2 += 26;
if (t1 < t2) spend += t1;
else spend += t2;
}
cost[i] = spend;
}
sort(cost, cost + len);
printf("%d\n", cost[0]);
T--;
}
return 0;
}