Advertisement
Guest User

Untitled

a guest
May 29th, 2015
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.05 KB | None | 0 0
  1. using System.Collections.Generic;
  2. namespace BracketSet
  3. {
  4.     public enum BracketType
  5.     {
  6.         Open = 1,
  7.         Closed = 2
  8.     }
  9.  
  10.     public class BracketPair
  11.     {
  12.         public Bracket brkt_Open { get; private set; }
  13.         public Bracket brkt_Close { get; private set; }
  14.  
  15.         public class Bracket
  16.         {
  17.             public BracketPair brktp_Owner { get; private set; }
  18.             public char char_Bracket { get; private set; }
  19.             public BracketType Type { get; private set; }
  20.  
  21.             public Bracket(BracketPair brktp_owner, char char_bracket, BracketType type)
  22.             {
  23.                 this.brktp_Owner = brktp_owner;
  24.                 this.char_Bracket = char_bracket;
  25.                 this.Type = type;
  26.             }
  27.         }
  28.  
  29.         public BracketPair(char char_open, char char_close)
  30.         {
  31.             this.brkt_Open = new Bracket(this, char_open, BracketType.Open);
  32.             this.brkt_Close = new Bracket(this, char_close, BracketType.Closed);
  33.         }
  34.     }
  35.  
  36.     public class BracketPairCollection : List<BracketPair>
  37.     {
  38.         public void Add(char char_open, char char_close)
  39.         {
  40.             this.Add(new BracketPair(char_open, char_close));
  41.         }
  42.         public bool IsValid(string str_val)
  43.         {
  44.             List<BracketSet.BracketPair.Bracket> brkt_lst_brackets = new List<BracketSet.BracketPair.Bracket>();
  45.  
  46.             foreach (char char_ in str_val)
  47.             {
  48.                 foreach (BracketPair pair in this)
  49.                 {
  50.                     BracketSet.BracketPair.Bracket brkt;
  51.                     if (char_ == (brkt = pair.brkt_Open).char_Bracket || char_ == (brkt = pair.brkt_Close).char_Bracket)
  52.                     {
  53.                         brkt_lst_brackets.Add(brkt);
  54.                         break;
  55.                     }
  56.                 }
  57.             }
  58.  
  59.             if (brkt_lst_brackets.Count == 0 ||
  60.                 brkt_lst_brackets.Count % 2 == 1 ||
  61.                 brkt_lst_brackets[0].Type == BracketType.Closed ||
  62.                 brkt_lst_brackets[brkt_lst_brackets.Count - 1].Type == BracketType.Open)
  63.             {
  64.                 return false;
  65.             }
  66.  
  67.             int int_LastIndex = -1;
  68.             while (brkt_lst_brackets.Count > 0)
  69.             {
  70.                 int int_closingIndex = brkt_lst_brackets.FindIndex(o => o.Type == BracketType.Closed);
  71.                 if (int_closingIndex == int_LastIndex)
  72.                 {
  73.                     return false;
  74.                 }
  75.  
  76.                 int int_openingIndex = int_closingIndex - 1;
  77.  
  78.                 if (int_openingIndex < 0 || int_closingIndex < 0)
  79.                 {
  80.                     return false;
  81.                 }
  82.  
  83.                 if (brkt_lst_brackets[int_openingIndex].brktp_Owner == brkt_lst_brackets[int_closingIndex].brktp_Owner)
  84.                 {
  85.                     brkt_lst_brackets.RemoveAt(int_closingIndex);
  86.                     brkt_lst_brackets.RemoveAt(int_openingIndex);
  87.                 }
  88.             }
  89.  
  90.             return true;
  91.         }
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement