写一个最长回文子串的c++代码
时间: 2024-10-23 21:07:28 浏览: 40
字符串寻找最长回文
在 C++ 中,找出字符串中最长回文子串通常会使用动态规划的方法。这里是一个简单的代码示例:
```cpp
#include <iostream>
#include <string>
using namespace std;
// 动态规划函数,返回字符串s中最长的回文子串长度
int longestPalindrome(string s) {
int n = s.length();
bool dp[n][n]; // 初始化二维数组dp,表示子串是否是回文
int maxLength = 0; // 最长回文子串长度
int start = 0; // 最长回文子串起始位置
for (int i = 0; i < n; i++) {
dp[i][i] = true; // 单字符都是回文
}
// 遍历字符串,检查长度大于1的子串
for (int length = 2; length <= n; length++) {
for (int i = 0; i < n - length + 1; i++) {
int j = i + length - 1;
if (length == 2 && s[i] != s[j]) {
dp[i][j] = false;
} else if (s[i] == s[j] && dp[i + 1][j - 1]) {
dp[i][j] = true;
if (length > maxLength) {
maxLength = length;
start = i;
}
}
}
}
return maxLength;
}
int main() {
string str = "babad";
cout << "The longest palindrome substring in the given string is: ";
cout << str.substr(start, maxLength) << endl;
cout << "Its length is: " << maxLength << endl;
return 0;
}
```
在这个代码中,`longestPalindrome` 函数首先初始化一个二维布尔数组 `dp` 来记录子串是否是回文。然后通过两层循环遍历字符串,判断每个子串是否是回文。如果是,更新最长回文子串的长度和起始位置。
运行这个程序,输入如 "babad",它将输出 "bab",长度为 3,因为 "bab" 是原字符串中最大的回文子串。
阅读全文