验证下一个char是否与第一个char相同

时间:2017-06-04 05:16:10

标签: java algorithm

我发现了一个问题,我尝试了我的逻辑,但我没有找到解决方案。

这是我试图在java中解决的问题。

对于每个左大括号(即(,{,或[),都有相同类型的匹配右括号(即,),}或])(即(匹配),{匹配},和[ 火柴 ])。开口支撑必须出现在它匹配的闭合支撑之前(左侧)。例如,] {} [不平衡。

在一对匹配的牙套之间没有无与伦比的牙套。例如,({[]})是平衡的,但{[}]和[{)]不平衡。

我想编写一个java代码,它会接受大括号的输入并输出是否平衡。

我无法为这种代码应用逻辑,但我试过它甚至没有接近预期。请提供一些逻辑。我知道这不是一个家庭作业完成网站,但我坚持这个问题的逻辑。一段代码片段将不胜感激。

3 个答案:

答案 0 :(得分:5)

这与java无关。您需要使用堆栈来跟踪遇到括号的顺序。
算法 -

  1. 循环输入字符串。
  2. 如果当前字符是左括号,请将其推入堆栈
  3. 它是一个关闭括号,从堆栈中弹出一个元素,如果它不是当前关闭括号的相应开口括号,则它不平衡。
  4. 遍历字符串后,如果堆栈中有一个开口括号,则它不平衡。

答案 1 :(得分:2)

试试这个。

public static boolean isBalanced(String s) {
    Deque<Character> stack = new LinkedList<>();
    for (int i = 0; i < s.length(); ++i) {
        char c = s.charAt(i);
        if (c == '(')
            stack.push(')');
        else if (c == '[')
            stack.push(']');
        else if (c == '{')
            stack.push('}');
        else if (c == ')' || c == ']' || c == '}')
            if (stack.isEmpty() || !stack.pop().equals(c))
                return false;
    }
    return stack.isEmpty();
}

没有开关版本:

Database.database.goOnline()

答案 2 :(得分:0)

解决此问题的另一种方法。

这可以使用Stack Datastructure解决。

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String string = in.next(); //input string -> eg : {{[[(())]]}}
        boolean check = Paran(string);
        if(check){
           System.out.println("YES");
        }
        else{
           System.out.println("NO");

        }
    }

    //function that checks brackets are balanced or not
    public static boolean Paran(String string){
        //create a stack 
        Stack<Character> s = new Stack<Character>();

        //check if string is empty
        //if string is empty then Balanced
        if(string.length() == 0){
            return true;
        }

        //if string is not empty, go through each character
        for(int i = 0; i< string.length(); i++){

            //fetch each character
            char current = string.charAt(i);

            //check if that character id any of {([
            // if yes push on to the stack
            if(current == '[' || current == '{' || current == '('){
                    s.push(current);
            }

            //check if that character id any of }])
            if(current == '}' || current == ']' || current == ')'){
                //check stack is empty 
                //if yes then return false
                if(s.isEmpty()){
                    return false;
                }

                //else fetch top most item
                char pre = s.peek();
                if((current == '}' && pre == '{') || (current == ']' && pre == '[') || (current == ')' && pre == '(')){
                        s.pop();
                    }
                    else{
                        return false;
                    }
             }   
        }
        return s.isEmpty();
    }

 }

希望这有帮助