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),因为使用了相同的字符串,并且程序中的内存需求没有增加。