diff --git a/backtracking/remove_invalid_parenthesis.py b/backtracking/remove_invalid_parenthesis.py new file mode 100644 index 000000000000..862006d7f7a7 --- /dev/null +++ b/backtracking/remove_invalid_parenthesis.py @@ -0,0 +1,52 @@ +def isParenthesis(c): + return (c == "(") or (c == ")") + + +def isValidString(str): + cnt = 0 + for i in range(len(str)): + if str[i] == "(": + cnt += 1 + elif str[i] == ")": + cnt -= 1 + if cnt < 0: + return False + return cnt == 0 + + +# method to remove invalid parenthesis +def removeInvalidParenthesis(str): + if len(str) == 0: + return + + visit = set() + + q = [] + temp = 0 + level = 0 + + q.append(str) + visit.add(str) + while len(q): + str = q[0] + q.pop(0) + if isValidString(str): + print(str) + + level = True + if level: + continue + for i in range(len(str)): + if not isParenthesis(str[i]): + continue + + temp = str[0:i] + str[i + 1 :] + if temp not in visit: + q.append(temp) + visit.add(temp) + + +expression = "()())()" +removeInvalidParenthesis(expression) +expression = "()v)" +removeInvalidParenthesis(expression)