天天看点

等括号字符串的判断

等括号字符串的判断:

判断一个字符串 是否是 "等括号"字符串

等括号的含义

1).必须成对出现 有开始有结束 “()” “[]”

2).允许括号嵌套 “([])” “[{}([])]”

3).但是不允许单独嵌套 “{(})” “({[}])”

4).字符串中只有一共四种括号 () [] {} <>

题目: 要用户输入一个只包含这四种括号的字符串,我们判断该字符串是否是"等括号"字符串

代码如下:

public class Test02 {
    public static void main(String[] args) {
        System.out.println("请输入字符串");
        String str = new Scanner(System.in).next();
        while (str.length() != 0) {   //输入的字符串长度肯定不为0,所以进入循环
            int start = str.length();
            str.replace("<>", "");
            str.replace("[]", "");
            str.replace("()", "");
            str.replace("{}", "");
            int end = str.length();
            if (start == end) {
                System.out.println("您输入的字符串为非等括号字符串");
                return;
            }
        }
        //以上的代码都执行完毕了,那就证明是等括号字符串,所以可以输出
        System.out.println("您所输入的为等括号字符串");
    }
}
           

代码思想如下:

public class Test {
    public static void main(String[] args) {
        System.out.println("请输入字符串");
        String userinputstring = new Scanner(System.in).next();  //由用户输入
        //用户输入完毕后,设置代码进行相关判断
        //-->我需要判断用户输入的是不是等括号字符串,
        //-->按照题目来讲,我们需要要判断用户输入的如果不是等括号字符串,该如何进行辨析。
        //-->但是通过逆向思维,我先去判断用户输入的如果就是等括号字符串,
        //-->再由等括号字符串所具有的的规律,反向推理,即符合等括号字符串的规律为等括号字符串,
        //-->那么不符合括号字符串的规律的字符串就为非符合括号字符串!!
        //-->随意书写一组符合规律的等括号字符串:"<[({})]>{<([])>}"。
        //-->由上面可以看出来,符合规律的等括号字符串的中心,均为一个成对的括号,由此入手:
        //-->利用字符串的方法replace,去依次消除中心的成对括号,
        //-->当中心成对的括号被消除,会在中心出现新的成对括号,再次消除,等到所有中心成对括号消除完毕,
        //-->因为是等括号的字符串,所有整个字符串也被消除完毕。即字符串的长度为0.
        //代码实现
        while (userinputstring.length() != 0) {  //输入的字符串长度肯定不为0,所以进入循环,开始替换
            int start = userinputstring.length();
            userinputstring.replace("<>", "");   //-->将"<>",替换为"空"
            userinputstring.replace("[]", "");     //-->将"[]",替换为"空"
            userinputstring.replace("()", "");    //-->将"()",替换为"空"
            userinputstring.replace("{}", "");    //-->将"{}",替换为"空"
            int end = userinputstring.length();
            if (start == end) {
                System.out.println("您输入的字符串为非等括号字符串");
                return;
            }
        }
        //以上的代码都执行完毕了,那就证明是等括号字符串,所以可以输出
        System.out.println("您所输入的为等括号字符串");
        //如果当消除(替换)进行到非等括号字符串时,模拟如下{([)]}
        //-->中心的为非等括号"[)",进入while循环时,无法被替换,所以由开始到结束,没有被替换,
        //-->没有被替换长度也就相等(即长度是没有被替换的表现)
        //-->所以需要设置条件,进入whlie循环时设置计算字符串长度 int start = userinputstring.length();
        //-->结束whlie循环时,int end = userinputstring.length();
        //-->当 start == end  时,则没有发生替换,那就可以判定为非等括号字符串了。
        //代码实现如上
    }
}
           

如果有什么疑问,欢迎留言,另外这道题的解题思路不止一种,如有您有想交流的,也请留言~~~~~~