Encoding
Time Limit:1000MS Memory Limit:65536K
Total Submit:62 Accepted:35
Description
Given a string containing only 'A' - 'Z', we could encode it using the following method:
1. Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string.
2. If the length of the sub-string is 1, '1' should be ignored.
Input
The first line contains an integer N (1 < = N < = 100) which indicates the number of test cases. The next N lines contain N strings. Each string consists of only 'A' - 'Z' and the length is less than 10000.
Output
For each test case, output the encoded string in a line.
Sample Input
2
ABC
ABBCCC
Sample Output
ABC
A2B3C
Source
#include <stdio.h> #include <string.h> #define MAXN 10000 + 10 char str[MAXN]; int main() { int n, i, k, c, thisn, maxn; scanf("%d", &n); while (n--) { c = 0; scanf("%s", str); k = strlen(str); str[k] = -1; // 这里的输入长度小于定义的长度所以不会越界 thisn = maxn = 0; for ( i=0; i<k; i++ ) { thisn++; if ( thisn > maxn ) { //实时更新段的长度 maxn = thisn; } if ( str[i+1] != str[i] ) { // 当后面的与前面的不同时输出之前的 thisn = 0; if ( maxn == 1 ) { printf("%c", str[i]); } else { printf("%d%c", maxn, str[i]); maxn = 0; // 输出后将最大长度再次赋值为0 } } } printf(" "); } return 0; }