我正在编写一个程序来查找 C++ 中的大回文,我需要获取输入字符串的回文,忽略大小写、标点符号和空格。例如,请参见以下行:
孔子说:夫人,我是亚当。
在这里,最大的回文是Madam,如果你忽略大小写、标点符号和空格,我是 Adam 。
该程序还必须高效,以便在 < 1 秒内测试 2000 个字符的字符串。所以我有以下代码来返回最大的回文:
string largestPal(string input_str) {
string isPal = "";
string largest = "";
int j, k;
for(int i = 0; i < (input_str.length() - 1); ++i) {
k = i + 1;
j = i - 1;
if(j >= 0 && k < (input_str.length())) {
if(input_str[i] == input_str[j])
j--;
else if(input_str[i] == input_str[j])
k++;
}
while(j >= 0 && k < (input_str.length())) {
if(input_str[j] != input_str[k])
break;
else {
j--;
k++;
}
isPal = input_str.substr(j + 1, k - j - 1);
if(isPal.length() > largest.length()) {
largest = isPal;
}
}
}
return largest;
}
我尝试输入一个完全格式化的字符串(没有空格、标点符号和大小写)作为该方法的参数,并成功获得了我想要的输出。(例如,前面的示例返回MADAMIMADAM作为最大回文数。
问题:
如何将此字符串转换回原来的状态(使用标点符号、空格和大小写)?
或者
如何在方法中直接测试剥离的字符串largestPal
,但返回对应于所选最大回文的原始字符串(未剥离的)?
非常感谢任何帮助!