在Java中使用Stack进行平衡符号检查

时间:2014-04-19 00:00:34

标签: java string stack

嘿伙计,所以我有一个任务,我应该读取用户输入的字符串,并使用堆栈检查平衡符号。因此,如果字符串是“{[()]}”,则字符串是平衡的,因为每个开口都有一个关闭。我的想法是使用一个循环来检查给定字符串中的每个字符,如果字符串有一个开头,如“([{”那么它会执行stack.push(char),如果字符更接近“)] “然后我需要使用stack.pop(char)。我遇到的问题是我的教授强迫我使用字符串方法,我在网上找到的任何帮助都是使用布尔方法,如果有人可以帮助我,我会很感激。

我知道我的代码不起作用,但你至少可以了解我的逻辑是什么。

import java.util。*;

public class BalancedSymbols {

public static String balancedSymbols(String lineToCheck){ //this is the method that im being forced to use

    Stack<String> stack = new Stack<String>();

   for (int i = 0; i<lineToCheck.length(); i++){

        char x = '(';
        char y = '{';
        char z = '[';

        char a;
        a = lineToCheck.charAt(i);

        if (a == x){

            stack.push(a);

        }

        if (a == y){

            stack.push(a);

        }

        if (a == z){

            stack.push(a);

        }


    }

}

}

显然,除了使用不同的符号外,我会对弹出做同样的事情。

2 个答案:

答案 0 :(得分:0)

这是逻辑:

创建空堆栈。 (你已经完成了)。

遍历字符串。

对于您遇到的每个字符ch,如果ch }])且堆栈为空返回false
其他

如果({[ 推送 堆栈> 如果ch)}] 检查 堆栈顶部
如果stack top等于从堆栈弹出的相应开始括号,则返回false
如果您已到达String的结尾且堆栈不为空返回false
其他返回true
 返回false的原因是我们没有相应的匹配括号。 这些是额外的括号

首先尝试自己实现它。如果您遇到任何问题,请对其进行评论..我很乐意为您提供帮助。

如果您有任何问题,请发表评论。

答案 1 :(得分:0)

 Create empty stack
 ==========================

private static boolean isValideEx(String str) {

    Stack<Character> st=new Stack<Character>();

    if(str == null || str.length() == 0)
        return true;

    for (int i = 0; i < str.length(); i++) {
        if(str.charAt(i)==')'){
                if(!st.isEmpty() && st.peek()=='('){
                    st.pop();
                }else{
                    return false;
                }
        }else if(str.charAt(i)==']'){
                if(!st.isEmpty() && st.peek()=='['){
                    st.pop();
                }else{
                    return false;
                }
        }else if(str.charAt(i)=='}'){
                if(!st.isEmpty() && st.peek()=='{'){
                    st.pop();
                }else{
                    return false;
                }
        }else{
            st.push(str.charAt(i));
        }

    }
    System.out.println(" sy "+st);

    if(st.isEmpty())
        return true;
    else
        return false;
}