一道面试题,当时有思路,但是没写出来,
回家写了写,请各位大神评论。
需求: 给定任意字符串,消除相邻重复的字符, 如果结果字符串中还包含相邻的重复字符继续消除,直到结果字符串中相邻字符间都不相同为止。如ABBCADDDAC->ACAAC->ACC->A
实现代码:
public static void main(String[] args) {
String str = "ABBCADDDAC"; //ACAAC ACC A
StringDeleteTest test = new StringDeleteTest();
test.deleteRepeatChar(str);
}
public static void main(String[] args) {
String str = "ABBCADDDAC"; //ACAAC ACC A
StringDeleteTest test = new StringDeleteTest();
test.deleteRepeatChar(str);
}
public void deleteRepeatChar(String str) {
List list = new ArrayList();
StringBuffer newStr = new StringBuffer("");
if(str.length() == 1) {
newStr = new StringBuffer(str);
}
int len = str.length();
for(int i = 1 ;i < len;i++) {
String chi = str.substring(i, i+1);//取后一个字符
String chj = str.substring(i-1, i);//取前一个字符
if(chi.equals(chj)&&!list.contains(chi)) {
list.add(chi);//对于相邻出现的字符,加到list集合里
}else if(!list.contains(chj)){
newStr.append(chj);//如果不相邻出现,并且没有重复出现过,做为新的字符串。
}
if(i == str.length()-1 && !list.contains(chi)) {
newStr.append(chi);
}
}
if(list.size() >0 ) {
System.out.println("newStr...." + newStr);
this.deleteRepeatChar(newStr.toString());//"ABBCADDDAC"; //ACAAC ACC A,这样一个过程所以用到了递归。
}
}