مساله:
یک تابع بنویسید که یک رشته حاوی پرانتز را برگیرد و تعیین می کند که ترتیب پرانتز معتبر است یا خیر. اگر رشته معتبر باشد، تابع باید true و اگر نامعتبر است ، false برگرداند.
مثال ها:
"()" => true ")(()))" => false "(" => false "(())((()())())" => true
محدودیت ها :
0 <= input.length <= 100
همراه با پرانتز باز ( و بسته ) ، ورودی ممکن است شامل هر کاراکتر معتبر ASCII باشد. علاوه بر این، رشته ورودی ممکن است خالی باشد و/یا هیچ پرانتزی نداشته باشد. با سایر پرانتزها(مانند [] ، {} ، <>) به عنوان پرانتز برخورد نکنید.
Description:
Write a function that takes a string of parentheses, and determines if the order of the parentheses is valid. The function should return true if the string is valid, and false if it’s invalid.
Examples
"()" => true ")(()))" => false "(" => false "(())((()())())" => true
Constraints
0 <= input.length <= 100
Along with opening (() and closing ()) parenthesis, input may contain any valid ASCII characters. Furthermore, the input string may be empty and/or not contain any parentheses at all. Do not treat other forms of brackets as parentheses (e.g. [], {}, <>).
import java.util.Stack; public class Solution{ public static boolean validParentheses(String parens) { Stack<String> stack = new Stack<String>(); String[] arr = parens.split(""); for (String ch : arr) { if (ch.equals("(")) stack.push("("); else if (ch.equals(")")) { if (stack.size() == 0) return false; stack.pop(); } } return stack.size() > 0 ? false : true; } }
public class Solution{ public static boolean validParentheses(String str) { int count = 0; for(int i = 0; i < str.length(); i++) { if(str.charAt(i) == '(') count++; else if(str.charAt(i) == ')') count--; if(count < 0) return false; } if(count == 0) return true; else return false; } }
import java.util.regex.*; public class Solution { public static boolean validParentheses(String parens) { try { Pattern.compile(parens.replaceAll("[^()]", "")); return true; } catch (PatternSyntaxException e) { return false; } } }
public class Solution{ public static boolean validParentheses(String parens) { while (parens.contains("(") && parens.contains(")")) { parens = parens.replaceAll("\\([^()]*\\)", ""); if (!parens.matches(".*\\(+.*\\)+.*")) break; } return !parens.contains("(") && !parens.contains(")"); } }
public class Solution{ public static boolean validParentheses(String parens) { int stack = 0; for(var c : parens.toCharArray()) { if (c == '(') ++stack; else if (c == ')') { if (stack == 0) return false; else --stack; } } return stack == 0; } }
import java.util.*; public class Solution{ public static boolean validParentheses(String parens) { ArrayList<String> list = new ArrayList<String>(Arrays.asList(parens.split(""))); for (int i = 0 ; i < list.size();i++) { if (list.get(i).equals(")")) return false; if (list.get(i).equals("(")) { int k = findRightParentheses(list,i); if (k != 0) { list.remove(i); list.remove(k - 1); i--; } else return false; } } return true; } public static int findRightParentheses(List<String> list,int number) { for (int i = number; i < list.size(); i++ ) { if (list.get(i).equals(")")) return i; } return 0; } }
public class Solution{ public static boolean validParentheses(String parens){ int count = 0; for (int i= 0 ; i <parens.length(); i++) { if (parens.charAt(i)=='(') { count ++; } else if (parens.charAt(i)==')') { count--;; } if (count <0) return false; } return count==0; } }