问题描述
如何实现aaabbbsdd转换成3a3bs2d我刚开始的思路是用正则表达式先切割然后替换,可是写不出来。希望大家能写出来参考一下、谢谢。或者给个伪代码。
解决方案
public class StringZip {public static void main(String[] args) {StringBuilder sb = new StringBuilder();Stack stack = new Stack();for (char c : "aaabbbsdd".toCharArray()) {stack.push(c, sb);}stack.append(sb);System.out.println(sb);}static class Stack {private int count = 1;private Character chr;public void push(char c, StringBuilder sb) {// 初次。if (chr == null) {chr = c;return;}// 相同则+1。if (chr == c) {count++;return;}// 不同则输出。append(sb);// 重置。chr = c;count = 1;}public void append(StringBuilder sb) {if (count > 1) {sb.append(count);}sb.append(chr);}}}
解决方案二:
1、转换字符串为字符数组循环。2、设置计数单位变量 i,设置待比较字符变量 c;3、循环字符数组,取当前字符c,循环比较,如果和下一个相同,计数变量i加1,否则清零重新计数;
解决方案三:
public static void main(String[] args) {char[] chars = "aaabbbsdd".toCharArray();StringBuilder s = new StringBuilder();int count = 0;for(int i = 0, l = chars.length; i < l; i++) {char ch = chars[i];//如果不是最后一个 判断当前的 是否和下一个匹配 如果匹配count+1 继续下一轮if( i + 1 < l && chars[i+1] == ch) {count++;continue;}//如果是最后一个 判断最后一个 是否和前一个匹配 如果匹配count+1 if(i + 1 == l && chars[i - 1] == ch) {count++;}s.append(ch);if(count > 1) {s.append(count);}count = 0;}System.out.println(s.toString());}