coding-对字符串进行RLE压缩

package com.study.tencet;

import java.util.Scanner;

/**
 * @author zhangpba
 * @description 对字符串进行RLE压缩
 * @date 2023/2/20
 */
public class RLE {

    /**
     * 1. 题目描述
     * 对字符串进行RLE压缩,将相邻的相同字符,用计数值和字符值来代替。例如:aaabccccccddeee,则可用3a1b6c2d3e来代替。
     * <p>
     * 输入描述:
     * 输入为a-z,A-Z的字符串,且字符串不为空,如aaabccccccddeee
     * 输出描述:
     * 压缩后的字符串,如3a1b6c2d3e
     *
     * @param args
     */
    public static void main(String[] args) {
//        String info = "aaabccccccddeee";
        Scanner scanner = new Scanner(System.in);
        String info = scanner.nextLine();
        System.out.println(rle(info));
    }


    private static String rle(String info) {
        // 先进行判空
        if (info == null || info.isEmpty()) {
            return info;
        }
        StringBuffer buffer = new StringBuffer();

        // 初始化第一字母
        char chushi = info.charAt(0);
        // 初始化第一个字母的个数
        int count = 0;
        for (int i = 0; i < info.length(); i++) {
            if (chushi == info.charAt(i)) {
                // 当初始化的字母跟下一个字母一致的时候,给当前字母个数+1
                count++;
            } else {
                // 当初始化的字母跟下一个字母不一致的时候,拼接上一个字母和其个数
                // 上一个字母的个数
                buffer.append(count);
                // 上一个字母
                buffer.append(info.charAt(i - 1));
                // 初始化下一个字母的
                chushi = info.charAt(i);
                // 初始化下一个字母的个数
                count = 1;
            }
        }
        // 最后一个字母的数量
        buffer.append(count);
        // 最后一个字母
        buffer.append(chushi);
        return buffer.toString();
    }
}

 

posted @ 2023-02-20 21:23  zhangpba  阅读(32)  评论(0编辑  收藏  举报