2016/9/9阿里笔试编程题-字符串的查找替换

来源:互联网 发布:淘宝护盾 编辑:程序博客网 时间:2024/06/08 15:13

题目

  对于输入的字符串,我们需要完成的任务是从左到右扫描字符串,如果存在由三个以上(包括三个)连续相同字符组成的子串,就将这个子串从原串中去掉,并将原串剩下的部分拼接到一起。重复上述过程,直到无法去掉任何子串


示例

inputAAABCCDDDCBAABBBABBBA
outputBBA

Code

/** * Created by bamboo on 2016/9/9. */public class RemoveTriple {    public String deletePattern(String str) {        String result = str.replaceFirst("(.)\\1{2,}", "");        if (result.length() == str.length()) {            return result;        } else {            return deletePattern(result);        }    }    public static void main(String[] args) {        String a = "AABBBABBBA";        String b = "AAABCCDDDCB";        System.out.println(new RemoveTriple().deletePattern(a));    }}

附加正则

  • ([0-9])\1{5} 或 ([\d])\1{5} 连续相同的6位数字 如:333333
  • ([0-9a-zA-Z])\1{5} 连续相同的6位数字或字母 如:222222 cccccc ZZZZZZ
  • ([\d])\1{2}([a-z])\2{2} 连续相同3位数字后根连续相同的三位小写字母 如:222www
  • ([\d])\1{2}([a-z])\2{2} | ([a-z])\3{2}([\d])\4{2} 同上,但是能匹配数字+字母或字母+数字 如:222www 或 www222
  • 自己可以扩展,要注意的就是 \1 \2 \3 \4代表位置(看例子),从左到右递增
0 0