字符串转换
来源:互联网 发布:青山预算软件 编辑:程序博客网 时间:2024/06/01 10:41
题目描述
我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如”aaaa”是一个简单串,而”abcd”则不是简单串。现在给你一个仅由小写字母组成的字符串,你需要用最小的花费,将其转换成一个简单串。 花费的计算规则如下:将a到z这26个小写字母从左到右排成一排,则每个字母都有左右两个邻居,我们认为a的左邻居是z,z的右邻居是a。一个字母只能转换成其相邻的字母,转换的花费为1。一个字母可以进行多次转换,例如将a转换成d,可以进行如下的步骤: a->b->c->d,花费为3。字符串的转换花费为所有字母转换花费之和。例如将字符串”abbbz”转换成简单串的最小花费为3,转换后的结果为”bbbbb”。
输入格式
第一行一个整数T(T≤100),表示测试数据的组数。 每组测试数据只有一行,为仅含小写字母的字符串,字符串长度不超过1000。
输出格式
对于每一组数据,输出一个整数,表示将字符串转换成简单串的最小花费。
输入样例
2abbbaabbac
输出样例
23
实现思路
1.以a为基准,b转换为a花费为1,转换为z花费为1,转换为c花费为2,转换为y花费为2,以此类推可以得到一个花费数组spend[13];
2.遍历一遍字符串数组str[N],得到字符串的长度length和每个字母出现的次数存储在character[26]数组中
3.遍历character[26]数组,对character[i]不为0(为零表示对应字母没有出现),进行转换,计算将字符串转换为character[i]对应字母的总花费,找出最小值。
代码实现
1.spend数组
for(i = 1, j = 25; i < 13, j > 13; i++, j--) { spend[i] = i; spend[j] = i; }
2.输入并遍历字符串
scanf("%s",str);while(str[i] != '\0') { // 计算每个字母出现的次数 character[str[i] - 'a'] += 1; length += 1; i++; } i = 0;
计算花费
int count = 0; //初始化最小值 int min = 10000; for(i = 0; i < 26; i++) { if(character[i] != 0) { count = 0; // 计算总花费 for(j = 0; j < 26; j++) { // 字母出现的次数×转换成相应字母的花费 if(i > j) count += spend[i - j] * character[j]; else count += spend[j - i] * character[j]; } // 找出最小值 if(min > count) min = count; } }
完整代码
#include<stdio.h>int main(){ int i,j,k; // 测试次数 int N = 0; scanf("%d",&N); // 初始化费用 int spend[26] = {0}; spend[13] = 13; for(k = 0; k < N; k++) { // 字符串出现的次数 int character[26] = {0}; // 声明字符串 char str[1001]; // 字符串长度 int length = 0; for(i = 1, j = 25; i < 13, j > 13; i++, j--) { spend[i] = i; spend[j] = i; } // 输入字符串 scanf("%s",str); // 计算字符串长度和每个字母出现的次数 i = 0; length = 0; while(str[i] != '\0') { character[str[i] - 'a'] += 1; length += 1; i++; } i = 0; int count = 0; int min = 10000; for(i = 0; i < 26; i++) { if(character[i] != 0) { count = 0; for(j = 0; j < 26; j++) { if(i > j) count += spend[i - j] * character[j]; else count += spend[j - i] * character[j]; } if(min > count) min = count; } } printf("%d\n", min); } return 0;}
运行实例
0 0
- 字符串转换
- 字符串转换....
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- 字符串转换
- UIView 翻转动画
- UITextView的字数限制 及 添加自定义PlaceHolder
- Spring 框架参考文档(六)-Integration之Dynamic language support
- 给伪类设置z-index= -1;
- IOS UTF8中文字母数字 组合时长度截取
- 字符串转换
- Embedded binary is not signed with the same certificate as the parent app
- CSS Overflow:hidden
- CSS 3D旋转 hover 后设置transform 是相对于正常位置
- 立体透视 perspective transform-style 倾斜旋转
- 关于 iOS 10 中 ATS 的问题
- JS学习第一课
- JS函数
- 异常捕获