算法竞赛--字符串处理(二)

1.简单字符串

输入一串仅包含 ‘A’ - ‘Z’的字符串, 用下面的方法进行重新编码:

1. 若子串包含连续k个相同的字符,则改为kX; 其中X为这个子串中唯一的字符.

2. 如果子串中字符仅为1个时, 则前面的’1’则省去.

输入信息:

第一行输入为一个整数N (1 <= N <= 100)代表有几组测试数据. 下面紧跟N行字符串. 每个字符串仅包含’A’ - ‘Z’ 并且长度都小于 10000.

输出信息:

对于每个字符串, 输出对应解码后的字符串.

样例输入:

1
2
3
2
ABC
ABBCCC

样例输出:

1
2
ABC
A2B3C

注意:

1.每次处理完后对str字符串和哈希数组的清空.

2.注意先输入n的值,再利用循环接收n个字符串.

3.利用哈希数组时,H[0]-H[25]对应A-Z,A对应的ASII码为65,对应H[0]时要减去65.

思路:

利用字符串和哈希数组解题,先输入n的值,再接收n个字符串str,在字符串str中对每个个字符出现的数量利用哈希数组进行计数,再根据哈希数组中存储的数量进行计数.

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <string.h>
char str[10010];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
str[10010]={'0'}; //字符串清空
scanf("%s",str);
int len =strlen(str); //字符串的长度
int H[26]={0};
for(int i=0;i<len;i++) //记录每个字符的数量
H[str[i]-65]++;
for(int i=0;i<26;i++) //对数量不为0的字符进行输出
{
if(H[i]==1)
printf("%c",i+65);
if(H[i]>1)
printf("%d%c",H[i],i+65);
}
printf("\n");
}
return 0;
}
小礼物走一个哟
0%