压缩字符串

本文介绍了如何对给定字符串进行压缩操作,当连续字符相同时计数,否则将计数值与字符拼接。例如输入'aaabbccccaa',输出'a3b2c4a2'。若压缩后长度增加,则保持原样输出。文中使用栈作为主要数据结构来实现这一过程。

一、问题描述
给定一个字符串进行压缩
例如:(1)输入:aaabbccccaa
输出:a3b2c4a2
(2)输入:aabbcde
输出:aabbcde
这个压缩后是a2b2c1d1e1,它的长度大于压缩之前的,所以就输出压缩之前的字符串。
二、思路
这里用栈来模拟这个过程:栈中没有元素或者栈顶元素和当前元素相等,就入栈;否则就把栈中元素个数记录下来,再把栈顶元素和元素个数拼接,清空栈。
三、代码

public class Solution {
    public static void main(String[] args) {
        String str="aabbbccccaaa";
        System.out.println(compressString(str));
    }
    public static String compressString (String str) {
        String str1="";
        //用栈来模拟
        Stack<Character> stack=new Stack<>();
        for(int i=0;i< str.length();i++){
            char flag=str.charAt(i);
            if(stack.isEmpty()||stack.peek()==flag) {
                stack.push(flag);
            }else{
                //不相等的话就把它弄出来
                int size=stack.size();
                str1=str1+stack.peek()+stack.size();
                stack.clear();
                stack.push(flag);
            }
        }
        //到这里的话说明遍历完了
        //此时栈中保存的是最后一组相同元素
        //再次拼接即可
        int size1=stack.size();
        str1=str1+stack.peek()+size1;

        int len1=str.length();
        int len2=str1.length();
        //这里判断原字符串和压缩后字符串的长度比较
        if(len1<len2){
            return str;
        }
        return str1;
    }
}

四、运行结果
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值