Advertisement
Guest User

Untitled

a guest
Jun 15th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. "(({{}}))" is a valid s
  2. "{[]}" is a valid s
  3. "[{[}]]" is not valid
  4.  
  5. public class Question_ValidStringWithBrackets
  6. {
  7. public bool IsValidBracketString(String s, BracketValidator validator = null)
  8. {
  9. if (s == null)
  10. throw new ArgumentNullException("A string is required");
  11.  
  12. if (validator == null)
  13. validator = BracketValidator.CreateDefaultValidator();
  14.  
  15. Stack<char> openStack = new Stack<char>();
  16.  
  17. foreach (var curBracket in s)
  18. {
  19. if (validator.IsOpen(curBracket))
  20. {
  21. openStack.Push(curBracket);
  22. }
  23. else if (openStack.Count == 0 || validator.IsMatchingPair(openStack.Pop(), curBracket))
  24. {
  25. return false;
  26. }
  27. }
  28. return openStack.Count == 0;
  29. }
  30.  
  31. public class BracketValidator
  32. {
  33. private HashSet<char> openBrackets = new HashSet<char>();
  34. private Dictionary<char, char> closedOpenedPair = new Dictionary<char, char>();
  35.  
  36. public void AddPair(char open, char close)
  37. {
  38. if (char.IsWhiteSpace(open) || char.IsWhiteSpace(close))
  39. throw new ArgumentException("A bracket must be specified. An empty character is not allowed.");
  40.  
  41. if (openBrackets.Contains(open) || openBrackets.Contains(close))
  42. throw new ArgumentException("Brackets exist already.");
  43.  
  44. if (closedOpenedPair.ContainsKey(open) || closedOpenedPair.ContainsKey(close))
  45. throw new ArgumentException("Brackets exist already.");
  46.  
  47. openBrackets.Add(open);
  48. closedOpenedPair.Add(close, open);
  49. }
  50.  
  51. public Boolean IsOpen(char open)
  52. {
  53. return openBrackets.Contains(open);
  54. }
  55.  
  56. public bool IsMatchingPair(char open, char close)
  57. {
  58. return closedOpenedPair.TryGetValue(open, out char actualClose) && actualClose == close;
  59. }
  60.  
  61. public static BracketValidator CreateDefaultValidator()
  62. {
  63. var validator = new BracketValidator();
  64. validator.AddPair('{', '}');
  65. validator.AddPair('[', ']');
  66. validator.AddPair('(', ')');
  67.  
  68. return validator;
  69. }
  70. }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement