Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "(({{}}))" is a valid s
- "{[]}" is a valid s
- "[{[}]]" is not valid
- public class Question_ValidStringWithBrackets
- {
- public bool IsValidBracketString(String s, BracketValidator validator = null)
- {
- if (s == null)
- throw new ArgumentNullException("A string is required");
- if (validator == null)
- validator = BracketValidator.CreateDefaultValidator();
- Stack<char> openStack = new Stack<char>();
- foreach (var curBracket in s)
- {
- if (validator.IsOpen(curBracket))
- {
- openStack.Push(curBracket);
- }
- else if (openStack.Count == 0 || validator.IsMatchingPair(openStack.Pop(), curBracket))
- {
- return false;
- }
- }
- return openStack.Count == 0;
- }
- public class BracketValidator
- {
- private HashSet<char> openBrackets = new HashSet<char>();
- private Dictionary<char, char> closedOpenedPair = new Dictionary<char, char>();
- public void AddPair(char open, char close)
- {
- if (char.IsWhiteSpace(open) || char.IsWhiteSpace(close))
- throw new ArgumentException("A bracket must be specified. An empty character is not allowed.");
- if (openBrackets.Contains(open) || openBrackets.Contains(close))
- throw new ArgumentException("Brackets exist already.");
- if (closedOpenedPair.ContainsKey(open) || closedOpenedPair.ContainsKey(close))
- throw new ArgumentException("Brackets exist already.");
- openBrackets.Add(open);
- closedOpenedPair.Add(close, open);
- }
- public Boolean IsOpen(char open)
- {
- return openBrackets.Contains(open);
- }
- public bool IsMatchingPair(char open, char close)
- {
- return closedOpenedPair.TryGetValue(open, out char actualClose) && actualClose == close;
- }
- public static BracketValidator CreateDefaultValidator()
- {
- var validator = new BracketValidator();
- validator.AddPair('{', '}');
- validator.AddPair('[', ']');
- validator.AddPair('(', ')');
- return validator;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement