Java RLE升级算法

Java RLE upgrade algorithm

例如,如果我有这样的输入:

Heeeeeeeeeeeellooooo

输出必须是:

H9e3e2l5o

这是我到目前为止编写的代码:

    public class RLE {
        public static String encode(String s) {
            if (s == "" || s == null) return "";
            StringBuilder sb = new StringBuilder();
            int count = 1;
            char previous = s.charAt(0);
            char current;

            for (int i = 1; i < s.length(); i++) {
                current = s.charAt(i);
                if (current == previous) {
                    count++;
                } else {
                    if (count == 1) {
                        sb.append(previous);
                    } else if (count > 1) {
                        sb.append(count).append(previous);
                        count = 1;
                    }
                }
                previous = current;

            }

            return sb.toString();
        }

结果:

'Heeeeeeeeeeeellooooo' -> H12e2l

代码丢失

if (count > 1) {
  sb.append(count);
}
sb.append(previous)

for 循环后。

您忽略了字符串的最后一个字符等于前一个字符的情况,即不打印。在 if(current == previous) case also

中添加增量逻辑
                    if (current == previous) {
                    count++;
                    if(i == s.length()-1){
                        if (count == 1) {
                            sb.append(previous);
                        } else if (count > 1) {
                            sb.append(count).append(previous);
                            count = 1;
                        }
                    }
                }

这对你有用

public static String encode(String s) {
    if (s == "" || s == null)
        return "";
    StringBuilder sb = new StringBuilder();
    int count = 1;
    char previous = s.charAt(0);
    char current;

    for (int i = 1; i < s.length(); i++) {
        current = s.charAt(i);
        if (current == previous) {
            count++;
        } else {
            if (count == 1) {
                sb.append(previous);
            } else if (count > 1) {
                if (count > 9) {
                    sb.append(9).append(previous);
                    sb.append(count - 9).append(previous);
                } else {
                    sb.append(count).append(previous);
                }
                count = 1;
            }
        }
        previous = current;

    }
    sb.append(count).append(previous);
    return sb.toString();
}