PTA.最长对称子串

我感觉这是最容易理解的写法

#include<stdio.h>
#include<string.h>
int max1(int a,int b)
{
	return a>b?a:b;
}
int main()
{
	char a[1001];
	gets(a);
	int len = strlen(a);
	int i,j,k,t,flag,res=0;
	for(i=0;i<len;i++)
	{
		for(j=i;j<len;j++)
		{
			flag = 0;
			for(k=i,t=j;k<=t;k++,t--)
			{
				if(a[k]==a[t])
				flag++;
				else break;
			}
			if(k>t)
			{
				res = max1(j-i+1,res);
			}
		}
	}
	printf("%d",res); 
	return 0;
}

如果这段代码有不足的地方,希望多多指点

### 关于 PTA 平台中最长对称子串的测试用例与解题思路 对于给定的字符串,目标是找到其最长对称子串并返回该子串的长度。这一问题可以通过动态规划或中心扩展算法高效解决。 #### 动态规划方法 定义一个二维布尔数组 `dp[i][j]` 表示从索引 `i` 到 `j` 的子串是否是对称子串。初始条件为单字符子串均为对称子串 (`dp[i][i]=True`) 和双字符子串仅当两个字符相同时才为对称子串 (`dp[i][i+1]=True if s[i]==s[j] else False`)。状态转移方程如下: ```python if dp[i+1][j-1] and s[i] == s[j]: dp[i][j] = True else: dp[i][j] = False ``` 通过遍历整个字符串的所有可能子串,记录最大长度及其对应的起始位置即可得到最终结果[^1]。 #### 中心扩展法 另一种更高效的解决方案是从每个可能的回文中心向外扩展。考虑到奇数长度和偶数长度两种情况下的不同中心点设置方式——即单独的一个字符作为中心(适用于奇数长度)以及一对连续相同的字符共同构成中心(适合处理偶数长度)。每次尝试从当前选定的位置出发向两侧延展直到不再满足镜像关系为止,并更新全局最优解。 以下是基于上述逻辑实现的一段 Python 代码示例: ```python def longest_palindrome_length(s: str) -> int: n = len(s) if n < 2: return n max_len = 0 def expand_around_center(left: int, right: int) -> None: nonlocal max_len while left >= 0 and right < n and s[left] == s[right]: current_len = right - left + 1 if current_len > max_len: max_len = current_len left -= 1 right += 1 for i in range(n): # 奇数长度 expand_around_center(i, i) # 偶数长度 if i + 1 < n: expand_around_center(i, i + 1) return max_len ``` 此函数接受输入字符串`s`,并通过调用辅助函数`expand_around_center()`分别针对每种类型的潜在回文结构执行必要的计算操作,最后返回所发现的最大回文子序列长度值。 #### 测试用例设计 为了验证程序正确性和鲁棒性,可以考虑以下几类典型场景: - 单一重复字母组成的极端例子:"aaaaa" - 不含任何有效回文字样的随机组合:"abcdefg" - 边界状况下仅有两位数字参与判定的情形:“ab” - 复杂混合模式包含多个局部最优点的数据样本:"racecarabcba" 以上述标准构建全面覆盖各类可能性的实际案例集合有助于确保开发成果具备广泛适用价值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ঞ᭄听এ๛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值