一、问题描述
给定一个字符串进行压缩
例如:(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;
}
}
四、运行结果

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

被折叠的 条评论
为什么被折叠?



