- 问题
一个字符串,其中只有小写的字母,按条件删除
1、当字符串中有ac挨着的情况下,把ac删除
2、当字符串中有b 把b删除
3、最好只遍历一次 Analyse
想一想要从字符串里面删除字符,但是又要移动字符的话好麻烦,首先考虑到StringBuilder类,使用这个类就比较简单了源代码
public class Interview {
public static void main(String[] args) {
String string="abbbbcaabbccasdjlfkja";
StringBuilder sb=new StringBuilder(string);
int i=0;
while(i<sb.length()){
if(sb.charAt(i)=='b'){ //发现b
sb.delete(i, i+1); //删除
if(i>=1)
i--;
}
else{
if(i<sb.length()-1)
if(sb.charAt(i)=='a'&&sb.charAt(i+1)=='c'){ //发现ac
sb.delete(i, i+2); //删除
if(i>=1)
i--;
continue;
}
i++;
}
}
System.out.println(sb.toString());
}
}
- 另一种方法——字符数组法
static void deal() {
String str = "abbbbcaabbccasdjlfkja";
char[] cs = str.toCharArray();
char[] targetCs = new char[cs.length];
int k = 0;
for (int i = 0; i < cs.length; i++) {
if (cs[i] != 'b') { //检测到b直接跳过
if (cs[i] != 'c') { //非c则进入新数组
targetCs[k] = cs[i];
k++;
} else {
if (k != 0 && targetCs[k - 1] == 'a') {//检测到是c,再检查上个进入新数组的是否为a,如果是,则指向退一,把a覆盖,同时检测边界
k--;
} else { //上一个进入的不是a,则c进入
targetCs[k] = cs[i];
k++;
}
}
}
}
String targetStr = new String(targetCs, 0, k);
System.out.println(targetStr);
}
- 嗯,对滴,就这些了