字符串B*A*C*D获取A长度

        /// <summary>
        /// B*A*C*D格式
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        static int GetLenA(string str)
        {
            // 二分法获取A为止
            int min = 0; int max = str.Length - 1;
            while (min < max)
            {
                var mid = (min + max) / 2;
                switch (str[mid])
                {
                    case 'B':
                        if (min == mid) return 0;
                        min = mid;
                        break;
                    case 'A':
                        min = max = mid;
                        break;
                    case 'C':
                    case 'D':
                        if (max == mid) return 0;
                        max = mid;
                        break;
                }
            }
            var len = 1;
            min = min + 1; max = max - 1;
            while (min <= str.Length - 1)
            {
                if (str[min] == 'A')
                {
                    len++;
                    min++;
                }
                else
                {
                    break;
                }
            }
            while (max >= 0)
            {
                if (str[max] == 'A')
                {
                    len++;
                    max--;
                }
                else
                {
                    break;
                }
            }
            return len;
        }

 

posted @ 2020-11-26 15:54  江境纣州  阅读(16)  评论(0编辑  收藏  举报