
 思路
 通过不断地检查是否含有"AB"或"CD",如果有则将其从字符串中删除,直到"AB"或"CD"都不存在时,返回字符串的长度
解题方法
 //检测是否有"AB"
 for(int i=0;i<len-1;i++){
 if(s.charAt(i)‘A’&&s.charAt(i+1)‘B’){
 s=s.substring(0,i)+s.substring(i+2);
 flag1=false;
 len=s.length();
 }
 }
//检测是否有"CD"
 for(int i=0;i<len-1;i++){
 if(s.charAt(i)‘C’&&s.charAt(i+1)‘D’){
 s=s.substring(0,i)+s.substring(i+2);
 flag1=false;
 len=s.length();
 }
 }
“AB” "CD"都不存在,则返回字符串长度
 使用while(true)进行不断循环,直到得到最小字符串
时间复杂度: O(n)
空间复杂度: O(1)
 Code
    public int minLength(String s) {
        int len=s.length();;
        boolean flag1,flag2;
        while(true){
            flag1=true;
            flag2=true;
            //检测是否有"AB"
            for(int i=0;i<len-1;i++){
                if(s.charAt(i)=='A'&&s.charAt(i+1)=='B'){
                    s=s.substring(0,i)+s.substring(i+2);
                    flag1=false;
                    len=s.length();
                }
            }
            //检测是否有"CD"
            for(int i=0;i<len-1;i++){
                if(s.charAt(i)=='C'&&s.charAt(i+1)=='D'){
                    s=s.substring(0,i)+s.substring(i+2);
                    flag1=false;
                    len=s.length();
                }
            }
            //"AB" "CD"都不存在,则返回字符串长度
            if(flag1==true&&flag2==true) break;
        }
        return s.length();
    }
 
官方答案:
class Solution {
    public int minLength(String s) {
        List<Character> stack = new ArrayList<Character>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            stack.add(c);
            int m = stack.size();
            if (m >= 2 &&
                (stack.get(m - 2) == 'A' && stack.get(m - 1) == 'B' ||
                stack.get(m - 2) == 'C' && stack.get(m - 1) == 'D')) {
                stack.remove(m - 1);
                stack.remove(m - 2);
            }
        }
        return stack.size();
    }
}
                






![[Linux进程(一)] 什么是进程?PCB的底层是什么?以及进程标识符pid与ppid](https://img-blog.csdnimg.cn/direct/92eb24be12fc4f318f0d7045ad62e590.png)











