需要得到所有相同的最长对称子串
时间: 2024-12-17 17:22:38 浏览: 34
如果需要得到所有相同的最长对称子串,可以在原有的基础上做一些修改。你可以使用哈希集合(如`std::unordered_set`)来存储已经找到的所有最长对称子串,防止重复。以下是修改后的部分代码:
```c
#include <iostream>
#include <string>
#include <unordered_set>
#include <vector>
// ... (之前的isSymmetric和findLongestPalindrome函数)
void findAllLongestPalindromes(char *str) {
std::unordered_set<std::string> unique_palindromes;
int len = strlen(str);
if (len <= 1) {
std::cout << "单个字符本身就是对称的。\n";
return;
}
int longest_len = 1;
char longest_start = 0;
// 从每个位置开始,尝试找出最长的对称子串
for (int center = 0; center < len; center++) {
int left = center, right = center;
// ... (循环左指针和右指针的部分)
// 检查当前子串是否是最长对称的
if (current_len > longest_len) {
longest_len = current_len;
longest_start = left;
unique_palindromes.clear(); // 清空集合,因为找到了新的最长对称子串
} else if (current_len == longest_len) { // 当前长度等于最长长度
unique_palindromes.insert(std::string(str + longest_start, longest_len)); // 添加到集合中
}
}
// 输出所有的最长对称子串
std::vector<std::string> all_longest_palindromes(unique_palindromes.begin(), unique_palindromes.end());
std::cout << "最长对称子串有以下几种:\n";
for (const auto &palindrome : all_longest_palindromes) {
std::cout << palindrome << "\n";
}
std::cout << "长度: " << longest_len << "\n";
}
int main() {
char str[100];
printf("请输入一个字符串: ");
fgets(str, sizeof(str), stdin); // 去掉换行符
str[strcspn(str, "\n")] = '\0';
findAllLongestPalindromes(str);
return 0;
}
```
现在当你运行这个程序并输入字符串时,它将不仅输出最长的对称子串,还会列出所有具有同样长度的最长对称子串。
阅读全文
相关推荐


















