Java程序在给定字符串中查找最长回文
时间:2020-01-09 10:35:33 来源:igfitidea点击:
在这篇文章中,我们将看到一个Java程序来查找给定字符串中最长的回文。在给定的字符串中,可能有不止一个回文,但是我们需要找出最长的一个并显示该回文。
为了找到字符串中最长的回文,我们需要从字符串的中间开始,左右移动一个字符并比较这些字符,如果这两个字符相等,则意味着我们有回文,并且我们执行相同的操作接下来的两个字符。例如,在字符串" 98189"中,中心是1,通过左右移动并进行比较,我们可以看到8和8以及9和9相等。同时,字符串的中心也会在程序中移动,因为我们必须在字符串中找到最长的回文。
要考虑的另一件事是String为偶数时,在这种情况下,我们将以两个字符为中心,然后进行字符比较。视为中心的两个字符也应相等。
Java程序寻找最长回文
public class LongestPal {
public static void main(String[] args) {
LongestPal lp = new LongestPal();
System.out.println("Longest Palindrome- " + lp.findLongestPalindrome("12321981189"));
System.out.println("Longest Palindrome- " + lp.findLongestPalindrome("toppot"));
System.out.println("Longest Palindrome- " + lp.findLongestPalindrome("101312321"));
System.out.println("Longest Palindrome- " + lp.findLongestPalindrome("101311321"));
}
public String findLongestPalindrome(String str) {
// starting point for comparison with other palindromes
String longestPalindrome = str.substring(0, 1);
for (int i = 0; i < str.length(); i = i+1) {
// odd length case (center is i)
String newPalindrome = checkIfEqual(str, i, i);
if (newPalindrome.length() > longestPalindrome.length()) {
longestPalindrome = newPalindrome;
}
// even length case (center is i, i+1)
newPalindrome = checkIfEqual(str, i, i + 1);
if (newPalindrome.length() > longestPalindrome.length()) {
longestPalindrome = newPalindrome;
}
}
return longestPalindrome;
}
public String checkIfEqual(String str, int begin, int end) {
while ((begin >= 0 && end <= str.length() - 1) && (str.charAt(begin) == str.charAt(end))) {
// move left
begin--;
// move right
end++;
}
return str.substring(begin + 1, end);
}
}
输出:
Longest Palindrome- 981189 Longest Palindrome- toppot Longest Palindrome- 12321 Longest Palindrome- 3113
该解决方案的时间复杂度为O(N2),空间复杂度为O(1),因为使用了相同的字符串,并且程序中的内存需求没有增加。

