手撕代码:字符串消消乐

字符串消消乐,将字符串中相邻相同的字符一起消掉,最后输出消除完成的字符串。
示例:abcccbxezzzrf7788fn
输出:axern
说明:从左住右消除,第一趟消除相邻相同的“ccc”、“zzz”、“77”、“88”,得到abbxerffn,第二趟消除相邻相同的“bb”、“ff”,得到axern,不存在相邻相同字符,消除结束。

 

不管题目考察目的,本着功能实现第一的原则先撸代码。

 

Java代码:

public static StringBuilder doReduce(StringBuilder strBuilder) {
    StringBuilder sb = new StringBuilder();
    if (strBuilder != null && strBuilder.length() != 0) {
        strBuilder.append(" ");
        // 是否有相临相同匹配
        boolean same = false;
        // 相临相同匹配首字符
        char c = strBuilder.charAt(0);
        for (int i = 1; i < strBuilder.length(); i++) {
            if (c == strBuilder.charAt(i)) {
                same = true;
            } else {
                if (!same) {
                    sb.append(c);
                }
                c = strBuilder.charAt(i);
                same = false;
            }
        }
        // 匹配完成,如果字符串长度没变则说明没有需要继续消除的了,否则递归继续消除
        if (sb.length() + 1 < strBuilder.length()) {
            return doReduce(sb);
        }
    }
    return sb;
}

 

你可能感兴趣的:(Java,字符串,java,算法)