求字符串中最长的回文字符串

该代码实现了一个寻找给定字符串中最长回文子串的算法。它使用了双指针技术来检查字符串中可能的回文子串,并通过比较找到最长的回文子串。程序首先定义了一个辅助函数`GetHuiwen`用于检测是否为回文子串,然后在`GetHuiwen2`中遍历字符串并调用辅助函数,最终输出最长回文子串的长度和值。
摘要由CSDN通过智能技术生成
using System;

namespace ConsoleApp11
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            GetHuiWen2("cbbd");
        }

        public static int GetHuiwen(string s, int left, int right, out int l, out int r)
        {
            l = -1;
            r = -1;
            while((left>=0 && right<s.Length ) && s[left] == s[right])
            {
                left--;
                right++;
            }

            int len = right - left - 1;
            if (len != 0)
            {
                l = left + 1;
                r = right - 1;
            }

            return len;
        }

        public static void GetHuiWen2(string s)
        {
            if (s == null || s.Length <= 0) return;

            int maxLen = 0;
            int maxLeft = -1;
            int maxRight = -1;
            for(int i=0; i<s.Length; i++)
            {
                int l1, r1, l2, r2;
                int tempLen1 = GetHuiwen(s, i, i, out l1, out r1);
                int tempLen2 = GetHuiwen(s, i, i + 1, out l2, out r2);

                if (tempLen1 > tempLen2)
                {
                    if (tempLen1 > maxLen)
                    {
                        maxLen = tempLen1;
                        maxLeft = l1;
                        maxRight = r1;
                    }
                }
                else if (tempLen1 < tempLen2)
                {
                    if(tempLen2 > maxLen)
                    {
                        maxLen = tempLen2;
                        maxLeft = l2;
                        maxRight = r2;
                    }
                }
            }

            Console.WriteLine("Length: " + maxLen);
            Console.WriteLine(string.Format("Value: {0}", s.Substring(maxLeft, maxRight - maxLeft + 1)));
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值