From 1a391c2fe9b77904cde13d8aecb44cf3833673ba Mon Sep 17 00:00:00 2001 From: Aidar Djamalbek <70245901+adjamalbek@users.noreply.github.com> Date: Tue, 1 Nov 2022 23:26:13 +0600 Subject: [PATCH] Add ValidParentheses (#3689) --- DIRECTORY.md | 2 ++ .../strings/ValidParentheses.java | 33 +++++++++++++++++++ .../strings/ValidParenthesesTest.java | 24 ++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 src/main/java/com/thealgorithms/strings/ValidParentheses.java create mode 100644 src/test/java/com/thealgorithms/strings/ValidParenthesesTest.java diff --git a/DIRECTORY.md b/DIRECTORY.md index 38a38cf02..0345ff4e3 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -477,6 +477,7 @@ * [ReverseStringRecursive](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java) * [Rotation](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Rotation.java) * [Upper](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Upper.java) + * [ValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/ValidParentheses.java) * [WordLadder](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/WordLadder.java) * zigZagPattern * [zigZagPattern](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/zigZagPattern/zigZagPattern.java) @@ -648,6 +649,7 @@ * [ReverseStringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/ReverseStringTest.java) * [RotationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/RotationTest.java) * [UpperTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/UpperTest.java) + * [ValidParenthesesTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/ValidParenthesesTest.java) * [WordLadderTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/WordLadderTest.java) * zigZagPattern * [zigZagPatternTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/zigZagPattern/zigZagPatternTest.java) diff --git a/src/main/java/com/thealgorithms/strings/ValidParentheses.java b/src/main/java/com/thealgorithms/strings/ValidParentheses.java new file mode 100644 index 000000000..e2b0f8e9b --- /dev/null +++ b/src/main/java/com/thealgorithms/strings/ValidParentheses.java @@ -0,0 +1,33 @@ +package com.thealgorithms.strings; +// Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. +// An input string is valid if: +// Open brackets must be closed by the same type of brackets. +// Open brackets must be closed in the correct order. +// Every close bracket has a corresponding open bracket of the same type. + + +public class ValidParentheses { + public static boolean isValid(String s) { + char[] stack = new char[s.length()]; + int head = 0; + for(char c : s.toCharArray()) { + switch(c) { + case '{': + case '[': + case '(': + stack[head++] = c; + break; + case '}': + if(head == 0 || stack[--head] != '{') return false; + break; + case ')': + if(head == 0 || stack[--head] != '(') return false; + break; + case ']': + if(head == 0 || stack[--head] != '[') return false; + break; + } + } + return head == 0; + } +} diff --git a/src/test/java/com/thealgorithms/strings/ValidParenthesesTest.java b/src/test/java/com/thealgorithms/strings/ValidParenthesesTest.java new file mode 100644 index 000000000..ab215f22e --- /dev/null +++ b/src/test/java/com/thealgorithms/strings/ValidParenthesesTest.java @@ -0,0 +1,24 @@ +package com.thealgorithms.strings; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +public class ValidParenthesesTest { + + @Test + void testOne() { + assertEquals(true, ValidParentheses.isValid("()")); + } + + @Test + void testTwo() { + assertEquals(true, ValidParentheses.isValid("()[]{}")); + } + + + @Test + void testThree() { + assertEquals(false, ValidParentheses.isValid("(]")); + } + +}