算法:反序输出字符串

public void ShowStr()
        {
            string mystr = "I am a good programer";
            List<string> list = new List<string>();
            foreach (var item in mystr)
            {
                list.Add(item.ToString());               //给泛型赋值
            }
            StringBuilder sb = new StringBuilder();
            for (int i = list.Count-1; i >=0 ; i--)
            {
                sb.Append(list[i].ToString());
            }
            Console.WriteLine(sb.ToString());
            Console.ReadKey();
        }

你好,关于你的问题,可以使用动态规划算法解决。具体思路如下: 1. 定义一个二维数组 dp,其中 dp[i][j] 表示从 i 到 j 是否为回文子串,默认为 false。 2. 初始化,当 i = j 时,dp[i][j] = true,表示单个字符一定是回文子串。 3. 当 i + 1 = j 时,若 s[i] = s[j],则 dp[i][j] = true,表示两个字符相同时也是回文子串;否则 dp[i][j] = false,表示不是回文子串。 4. 当 i + 1 < j 时,如果 s[i] = s[j] 并且 dp[i+1][j-1] = true,则 dp[i][j] = true,表示整个串也是回文子串;否则 dp[i][j] = false,表示不是回文子串。 5. 遍历 dp 数组,找到最长的回文子串的起始位置和长度。 下面是实现这个算法的 Python 代码: ```python class ChitGPT: def longestPalindrome(self, s: str) -> str: n = len(s) if n < 2: return s dp = [[False] * n for _ in range(n)] start, max_len = 0, 1 for i in range(n): dp[i][i] = True for j in range(1, n): for i in range(j): if s[i] != s[j]: dp[i][j] = False else: if j - i < 3: dp[i][j] = True else: dp[i][j] = dp[i+1][j-1] if dp[i][j] and j-i+1 > max_len: start = i max_len = j-i+1 return s[start:start+max_len] ``` 你可以尝试在使用 ChitGPT 进行交互时,输入以下内容进行测试: ``` 给你一个字符串 s,找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1:输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2:输入:s = "cbbd" 输出:"bb" ``` ChitGPT 会返回最长回文子串,即 "bab" 或 "bb"。注意输入时可以删掉开头的“给你一个字符串...”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值