对字符串进行 RLE 压缩,将相邻的相同字符,用计数值和字符值来代替。例如:aaabccccccddeee,则可用 3a1b6c2d3e 来代替。 
   数据范围:字符串长度满足 
 
                                        输入为a-z,A-Z的字符串,且字符串不为空,如aaabccccccddeee
压缩后的字符串,如3a1b6c2d3e
aaabccccccdd
3a1b6c2d
"""
字符串压缩
"""
import sys
if __name__ == "__main__":
    # sys.stdin = open("input.txt", "r")
    s = input().strip()
    count = 1
    ans = ""
    for i in range(1, len(s)):
        if s[i] == s[i - 1]:
            count += 1
        else:
            ans += str(count) + s[i - 1]
            count = 1
    ans += str(count) + s[-1]
    print(ans)
	
 比较朴素的解法
#include <iostream>
#include <string>
using namespace std;
//相邻的相同字符-用计数值和字符值代替
//几个a几个b几个c
int main(){
    string str, res;
    int ct = 0;
    cin >> str;
    while(str.find_first_not_of(str[0]) != string::npos) {
        char element = str[0];
        int end = str.find_first_not_of(element);
        ct = end;
        res = res + to_string(ct) + element;
        str = str.substr(end);
    }
    int len = str.length();
    res = res + to_string(len) + str[0];
    cout << res << endl;
    return 0;
} #include <iostream>
#include <string>
using namespace std;
int main()
{
    string str;
    while(cin >> str)
    {
        int a = 1;
        for(int i = 1;i<str.size();i++)
        {
            if(str[i]==str[i-1])
            {
                a++;
            }
            else
            {
                cout << a << str[i-1] ;
                a = 1;
            }
        }
        cout << a << str[str.size()-1] << endl;
    }
    return 0;
} /*
遍历一遍即可。
*/
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.next();
        char[] str = s.toCharArray();
        int len = s.length();
        int cnt = 0;
        for (int i = 0; i < len; i++) {
            cnt++;
            if (i == len - 1 || str[i] != str[i + 1]) {
                System.out.print(cnt + "" + str[i]);
                cnt = 0;
            }
        }
    }
}
 #include <bits/stdc++.h>
using namespace std;
 
int main()
{
    string str;
    getline(cin, str);
    for(int i = 0; i < str.length(); i++)   //遍历字符串
    {
        int cnt = 1;   //用来记录重复字符数量
        while(str[i] == str[i+1])   //判断是不是字符串中的重复字符
        {
            i++;
            cnt++;
        }
        cout << cnt << str[i];   //压缩后的形式,先输出重复字符的个数+1,再输出重复字符
    }
    return 0;
}
 import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        if (in.hasNextLine()) {
            String s = in.nextLine();
            char ch = s.charAt(0);
            int start = 0, end = 0;
            String outs = "";
            while (end < s.length()) {
                if (s.charAt(end) == ch) {
                    end++;
                } else {
                    outs = outs + (end - start) + ch;
                    ch = s.charAt(end);
                    start = end++;
                }
            }
            outs = outs + (end - start) + ch;
            System.out.println(outs);
        }
        in.close();
    }
} package main
import (
    "fmt"
    "strconv"
    "os"
    "bufio"
)
var in=bufio.NewReader(os.Stdin)
func main() {
    var s string
    fmt.Fscan(in,&s)
    ans:=""
    var pre byte
    cnt:=0
    for i,ch:=range []byte(s){
        if i==0{
            pre=ch
            cnt=1
        }else{
            if ch==pre{
                cnt++
            }else{
                ans+=strconv.Itoa(cnt)+string(pre)
                pre=ch
                cnt=1
            }
        }
    }
    ans+=strconv.Itoa(cnt)+string(pre)
    fmt.Print(ans)
} #include<iostream>
#include<unordered_map>
using namespace std;
int main()
{
    string S;
    cin>>S; 
    unordered_map<char, int> hash_map;
    
    for(auto it:S)
    {
        if(hash_map.find(it)!=hash_map.end())
        {
            hash_map[it]++;
        }
        else
        {
            hash_map.insert(pair<char, int>(it,1));
        }
    }
    string res;
    for(auto it:hash_map){
        string tmp=to_string(it.second)+it.first;
        res=tmp+res;
    }
    cout<<res;
}
哈希表
                                                                                    import sys
in_str = sys.stdin.readline().strip()
aa={}
aa[0]=in_str[0]
idx = 1
for i in range(len(in_str)-1):
    if in_str[i]!=in_str[i+1]:
        aa[idx] = in_str[i+1]
        idx+=1
res = ''
for value in aa.values():
    res+=str(in_str.count(value))
    res+=value
print(res)