我有一个作业要求我使用递归来确定隐藏在输入字符串中的最长回文。为了迭代地做到这一点,我选择尝试一种中间出方法。代码如下:
public static String findPalindrome(String s) {
String res = "";
int resLen = 0;
int left, right;
for (int i = 0; i < s.length(); i++) {
left = right = i;
// odd checker
while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
if ((right - left + 1) > resLen) {
res = s.substring(left, right + 1);
resLen = right - left + 1;
}
right++;
left--;
}
left = i;
right = i + 1;
// even checker
while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
if ((right - left + 1) > resLen) {
res = s.substring(left, right + 1);
resLen = right - left + 1;
}
right++;
left--;
}
}
return res;
}
输入:
f_)_$#dsoi**ipreferpi**ds!(#fj"
输出:
喜欢
我对递归不是很熟悉,所以我不确定如何去做。让我感到困惑的主要事情是我在这个循环中同时有一个 for 循环和一个 while 循环,我不知道如何将其转换为递归。我知道你必须有一个基本案例和一个递归案例,但我觉得我遗漏了一些东西。感谢您的任何建议。