Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. import java.util.HashMap;
  2. import java.util.Map;
  3. import java.util.Scanner;
  4. import java.util.Stack;
  5.  
  6. public class BalancedParentheses {
  7. public static void main(String[] args) {
  8. Scanner input = new Scanner(System.in);
  9. input.nextLine(); // skip first unecessary line.
  10. while (input.hasNextLine()) {
  11. System.out.println(isBalanced(input.nextLine()) ? "YES" : "NO");
  12. }
  13. }
  14.  
  15. private static boolean isBalanced(String input) {
  16. int parenCounter = 0;
  17. int curlyCounter = 0;
  18. int braceCounter = 0;
  19. Stack<Character> openers = new Stack<>();
  20. Map<Character, Character> parenMap = new HashMap<>();
  21. parenMap.put('(', ')');
  22. parenMap.put('[', ']');
  23. parenMap.put('{', '}');
  24.  
  25. for (int i = 0; i < input.length(); i++) {
  26. if (input.charAt(i) == '(') {
  27. parenCounter++;
  28. openers.push('(');
  29. } else if (input.charAt(i) == ')') {
  30. parenCounter--;
  31. if (!matchesLast(')', openers.pop(), parenMap)) {
  32. return false;
  33. }
  34. } else if (input.charAt(i) == '[') {
  35. braceCounter++;
  36. openers.push('[');
  37. } else if (input.charAt(i) == ']') {
  38. braceCounter--;
  39. if (!matchesLast(']', openers.pop(), parenMap)) {
  40. return false;
  41. }
  42. } else if (input.charAt(i) == '{') {
  43. curlyCounter++;
  44. openers.push('{');
  45. } else {
  46. curlyCounter--;
  47. if (!matchesLast('}', openers.pop(), parenMap)) {
  48. return false;
  49. }
  50. }
  51.  
  52. if (parenCounter < 0 || curlyCounter < 0 || braceCounter < 0) {
  53. return false;
  54. }
  55. }
  56.  
  57. return parenCounter == 0 && curlyCounter == 0 && braceCounter == 0;
  58. }
  59.  
  60. private static boolean matchesLast(char paren, char lastOpener, Map<Character, Character> parenMap) {
  61. return paren == parenMap.get(lastOpener);
  62. }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement