题目
对于输入的字符串,我们需要完成的任务是从左到右扫描字符串,如果存在由三个以上(包括三个)连续相同字符组成的子串,就将这个子串从原串中去掉,并将原串剩下的部分拼接到一起。重复上述过程,直到无法去掉任何子串
示例
input
AAABCCDDDCB
AABBBABBBA
output
BB
A
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代表位置(看例子),从左到右递增