判断一段字符串是否合法算法求解?
判断一段字符串是否合法! 
 如题: 
    字符串中必须符合以下规则: 
 1.Y-YYYY      占1-4位 
       GG                  占2      位 
       CC                  占2      位 
       SS-SSS      占2-3位 
       N-NN...N   占1-11位 
       R-RR...R   占1-11位 
 2.字符串长度不能大于或小于11位 
 3.不允许用正则表达式 
 例如:   YYYYGGCCSSS   这是合法 
                   ASSSGGCCNNN   这是不合法,因为A不属于此规则集合范围中 
                   GYYYYCCNNNN   这是不合法,因为G规定站2位   
 求如何写此函数 
------解决方案--------------------1.YYYYGGCCSSS是不合法的,因为没有n和r 
 2.代码如下     
 using System;   
 class App 
 { 
     public static void Main() 
     { 
         Console.WriteLine(Check( "yggccssnnnr ")); 
         Console.Read(); 
     }   
     private static bool Check(string s) 
     { 
         if (s.Length != 11) 
             return false; 
         else 
         { 
             s = s.ToLower(); 
             int[] a ={ 0, 0, 0, 0, 0, 0 }; 
             foreach (char c in s) 
             { 
                 switch (c) 
                 { 
                     case  'y ': 
                         a[0] = a[0] + 1; 
                         break; 
                     case  'g ': 
                         a[1] = a[1] + 1; 
                         break; 
                     case  'c ': 
                         a[2] = a[2] + 1; 
                         break; 
                     case  's ': 
                         a[3] = a[3] + 1; 
                         break; 
                     case  'n ': 
                         a[4] = a[4] + 1; 
                         break; 
                     case  'r ': 
                         a[5] = a[5] + 1; 
                         break; 
                     default: 
                         return false; 
                 } 
             } 
             if (a[0] > = 1 && a[0]  <= 4 && a[1] == 2 && a[2] == 2 & a[3] > = 2 && a[3]  <= 3 && a[4] > = 1 && a[4]  <= 11 && a[5] > = 1 && a[5]  <= 11) 
                 return true; 
             else 
                 return false; 
         } 
     } 
 }   
------解决方案--------------------public bool IsValidString(string str) 
 { 
     if (str.Length!=11) return false; 
     int[] arr = new int[6]; 
     int n; 
     foreach(char c in str) 
     { 
         switch(c) 
         { 
             case  'Y ': 
                 if (n!=0 && arr[0]!=0) return false;//非连续,退出 
                 arr[0]++; 
                 n = 0; 
                 break; 
             case  'G ': 
                 if (n!=1 && arr[1]!=0) return false;//非连续,退出 
                 arr[1]++; 
                 n = 1; 
                 break; 
             case  'C ': 
                 if (n!=2 && arr[2]!=0) return false;//非连续,退出 
                 arr[2]++; 
                 n = 2; 
                 break; 
             case  'S ': 
                 if (n!=3 && arr[3]!=0) return false;//非连续,退出 
                 arr[3]++; 
                 n = 3; 
                 break; 
             case  'N ': 
                 if (