首页 > 编程知识 正文

字符串压缩算法,字符串压缩 给定一段英文句子

时间:2023-05-04 12:11:07 阅读:270074 作者:4311

字符串压缩:利用字符重复出现的次数,编写一种方法,实现基本的字符串
压缩功能。比如,字符串“aabccdd”会变成“a2b1c2d2”。若“压缩”以后的字符
串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字
母(a-z)

示例 1:

输入:aabcccccddddd
输出:a2b1c5d5

示例 2:
输入:“abcdd”
输出:“abcdd”
解释:因为压缩后的字符串为:”a1b1c1d2”,长度大于原字符串

思路:
用StringBuilder以及它的append方法来字符串拼接,节约内存; 详情点这里
将字符串转换成数组,遍历数组;
向StringBuilder对象ans里添加字符和出现的次数;
因为我们是当前字符和前一个字符不同时才进行操作,
所以遍历完数组后别忘了将数组中最后一个元素和出现次数添加;
比较ans和原字符串的长度。

package demo3;public class Demo3 { public static void main(String[] args) { String s = "aabcde"; String s2 = "aaaabbccdd"; new Demo3().zip(s); new Demo3().zip(s2); } void zip(String s){ StringBuilder ans = new StringBuilder(); char []a = s.toCharArray(); int num = 1; for(int i=1;i<s.length();i++){ if(a[i] != a[i-1]){ ans.append(a[i-1]); ans.append(num); num = 1; } else{ num++; } } ans.append(a[s.length()-1]); ans.append(num); if(ans.length()<s.length()){ System.out.println(ans.toString()); } else{ System.out.println(s); } }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。