Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections.Generic;
- namespace BracketSet
- {
- public enum BracketType
- {
- Open = 1,
- Closed = 2
- }
- public class BracketPair
- {
- public Bracket brkt_Open { get; private set; }
- public Bracket brkt_Close { get; private set; }
- public class Bracket
- {
- public BracketPair brktp_Owner { get; private set; }
- public char char_Bracket { get; private set; }
- public BracketType Type { get; private set; }
- public Bracket(BracketPair brktp_owner, char char_bracket, BracketType type)
- {
- this.brktp_Owner = brktp_owner;
- this.char_Bracket = char_bracket;
- this.Type = type;
- }
- }
- public BracketPair(char char_open, char char_close)
- {
- this.brkt_Open = new Bracket(this, char_open, BracketType.Open);
- this.brkt_Close = new Bracket(this, char_close, BracketType.Closed);
- }
- }
- public class BracketPairCollection : List<BracketPair>
- {
- public void Add(char char_open, char char_close)
- {
- this.Add(new BracketPair(char_open, char_close));
- }
- public bool IsValid(string str_val)
- {
- List<BracketSet.BracketPair.Bracket> brkt_lst_brackets = new List<BracketSet.BracketPair.Bracket>();
- foreach (char char_ in str_val)
- {
- foreach (BracketPair pair in this)
- {
- BracketSet.BracketPair.Bracket brkt;
- if (char_ == (brkt = pair.brkt_Open).char_Bracket || char_ == (brkt = pair.brkt_Close).char_Bracket)
- {
- brkt_lst_brackets.Add(brkt);
- break;
- }
- }
- }
- if (brkt_lst_brackets.Count == 0 ||
- brkt_lst_brackets.Count % 2 == 1 ||
- brkt_lst_brackets[0].Type == BracketType.Closed ||
- brkt_lst_brackets[brkt_lst_brackets.Count - 1].Type == BracketType.Open)
- {
- return false;
- }
- int int_LastIndex = -1;
- while (brkt_lst_brackets.Count > 0)
- {
- int int_closingIndex = brkt_lst_brackets.FindIndex(o => o.Type == BracketType.Closed);
- if (int_closingIndex == int_LastIndex)
- {
- return false;
- }
- int int_openingIndex = int_closingIndex - 1;
- if (int_openingIndex < 0 || int_closingIndex < 0)
- {
- return false;
- }
- if (brkt_lst_brackets[int_openingIndex].brktp_Owner == brkt_lst_brackets[int_closingIndex].brktp_Owner)
- {
- brkt_lst_brackets.RemoveAt(int_closingIndex);
- brkt_lst_brackets.RemoveAt(int_openingIndex);
- }
- }
- return true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement