您的位置:首页 > 其它

字符串中字符删除ac和b

2017-11-23 23:38 736 查看
问题

一个字符串,其中只有小写的字母,按条件删除

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);
}


嗯,对滴,就这些了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: