LeetCode(中等)模式匹配(c#)

題目爲 你有兩個字符串,即pattern和value。 pattern字符串由字母"a"和"b"組成,用於描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),該字符串也匹配像"a"、"ab"和"b"這樣的模式。但需注意"a"和"b"不能同時表示相同的字符串。編寫一個方法判斷value字符串是否匹配pattern字符串。
在這裏插入圖片描述
思路爲 從a的長度從0開始遍歷,從表達式找出a數量,根據a數量、長度,就可以計算b的長度。判斷是否都是相等。代碼如下。

public bool PatternMatching(string pattern, string value)
        {
            //當表達式與字符串均爲空 返回true
            if (string.IsNullOrEmpty(pattern)&& string.IsNullOrEmpty(value))
            {
                return true;
            }
            //單一匹配也返回true
            else if (string.IsNullOrEmpty(value) && pattern.Length==1)
            {
                return true;
            }
            //都爲空返回false 
            else if (string.IsNullOrEmpty(pattern)|| string.IsNullOrEmpty(value))
            {
                return false;
            }
            int a = 0;
            int allLength = value.Length;
            //計算含有a和b的數量  從a數量爲0開始遍歷 當確定a的對應字符串,也可以根據總長計算b的數量以及B對應字符串
            int aCount = pattern.Count(e => e.Equals('a'));
            int bCount = pattern.Count(e => e.Equals('b'));
            int maxACount = 0;
            if (aCount!=0)
            {
                maxACount = allLength / aCount;
            }
            for (; a <= maxACount; a++)
            {
                //爲#代表初次賦值
                string aVal = "#";
                string bVal = "#";
                int b = 0;
                if (bCount!=0)
                {
                    b = (allLength - aCount * a) / bCount;
                }
                string values = value;
                string patternFlag = pattern;
                while (patternFlag.Length>0)
                {
                    char Begin = patternFlag[0];
                    patternFlag = patternFlag.Substring(1);
                    if (Begin=='a')
                    {
                        if (aVal == "#")
                        {
                            if (values.Length < a)
                            {
                                break;
                            }
                            aVal = values.Substring(0, a);
                            values = values.Substring(a);
                        }
                        else
                        {
                            if (values.Length<a)
                            {
                                break;
                            }
                            if (aVal!= values.Substring(0, a))
                            {
                                break;
                            }
                            values = values.Substring(a);
                        }
                    }
                    else
                    {
                        if (bVal == "#")
                        {
                            if (values.Length < b)
                            {
                                break;
                            }
                            bVal = values.Substring(0, b);
                            values = values.Substring(b);
                        }
                        else
                        {
                            if (values.Length < b)
                            {
                                break;
                            }
                            if (bVal != values.Substring(0, b))
                            {
                                break;
                            }
                            values = values.Substring(b);
                        }
                    }
                    if (string.IsNullOrEmpty(values))
                    {
                        //全部遍歷完成 都符合 返回true
                        return true;
                    }
                }
            }
            return false;
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章