HDU 1020 Encoding

本文深入探讨了一种字符串压缩算法,该算法通过对连续重复字符进行计数并替换为计数和字符的方式实现字符串的有效压缩。文章提供了详细的算法描述,输入输出说明,以及样例输入输出,同时附带了Java实现代码,帮助读者理解并实践该压缩算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 57816    Accepted Submission(s): 25811


 

Problem 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

 

 

Author

ZHANG Zheng

 

这道题不是让求排完序后的字符串的连续字符个数,而是未排序的字符串的连续字符个数,排序显得画蛇添足了。

附代码:

import java.util.Scanner;
public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int c = sc .nextInt();
		while(c-->0) {
			String a = sc.next(),s1="";
			char []s = a.toCharArray();
		    s1+=s[0];
			for(int i=1; i<s.length; ++i) {
				if(s[i]!=s1.charAt(s1.length()-1))
					s1+=s[i];
			}
			int []aa = new int[s1.length()];
			for(int i=0; i<s1.length();++i) {
				aa[i]=0;
			}
			for(int i=0,j=0; i<s.length; ++i) {
				if(s[i]==s1.charAt(j)) {
					aa[j]++;
				}
				else {
					j++; 
					aa[j]++;
				}
			}
			String s3="";
			for(int i=0; i<s1.length(); ++i) {
				if(aa[i]==1)
				s3+=s1.charAt(i);
				else
				s3=s3+aa[i]+s1.charAt(i);
			}
		    System.out.println(s3);
//			System.out.println(s1);
//			for(int i=0; i<s1.length();++i) {
//				System.out.println(aa[i]);
//			}
			
		}
		sc.close();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值