字符串中字符删除ac和b

来源:互联网 发布:南平广电网络招聘 编辑:程序博客网 时间:2024/06/06 03:31
  • 问题
    一个字符串,其中只有小写的字母,按条件删除
    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);    }
  • 嗯,对滴,就这些了
原创粉丝点击