C语言实现最长对称子字符串长度计算
以下是一个求最长对称子符串长度的C语言程序:
#include <stdio.h>
#include <string.h>
int max(int a, int b) {
return a > b ? a : b;
}
int longestPalindrome(char* s) {
int n = strlen(s);
int dp[n][n];
memset(dp, 0, sizeof(dp));
int ans = 1;
for (int len = 1; len <= n; len++) {
for (int i = 0; i + len - 1 < n; i++) {
int j = i + len - 1;
if (len == 1) {
dp[i][j] = 1;
} else if (len == 2) {
dp[i][j] = (s[i] == s[j]);
} else {
dp[i][j] = (s[i] == s[j] && dp[i+1][j-1]);
}
if (dp[i][j]) {
ans = max(ans, len);
}
}
}
return ans;
}
int main() {
char s[100];
printf("请输入字符串:");
scanf("%s", s);
int len = longestPalindrome(s);
printf("最长对称子符串的长度为:%d\n", len);
return 0;
}
该程序使用动态规划的思想,定义一个二维数组dp,其中dp[i][j]表示字符串s从i到j的子串是否是对称的。当字符串长度为1时,dp[i][j]为1;当字符串长度为2时,dp[i][j]为s[i]和s[j]是否相等;当字符串长度大于2时,dp[i][j]为s[i]和s[j]是否相等,并且dp[i+1][j-1]是否为对称子符串。最后遍历dp数组,找到最长的对称子符串长度。
原文地址: http://www.cveoy.top/t/topic/kUrD 著作权归作者所有。请勿转载和采集!