一个字符串中最长的帕林德罗姆基层是非常常见的( / community / tutorials /java-interview-questions)。 要找出 [String]( / community / tutorials /java-string)中最长的帕林德罗姆基层( / community / tutorials /java-string),首先,我们需要确定这样做的逻辑。
线程算法中最长的帕林德罗姆子序列
这里的关键点是,如果我们从任何帕林德罗姆字符串的中间走到右边和左边1个位置,它总是相同的字符。例如12321,这里的中间是3个,如果我们继续在两侧移动一个位置,我们得到2个,然后1个。我们将在Java程序中使用相同的逻辑来找出最长的帕林德罗姆。然而,如果帕林德罗姆长度是均匀的,中间大小也是均匀的。所以我们需要在我们的程序中确保这也被检查。
在 String Java 程序中最长的 Palindrome Substring
在我们的Java程序中,我们将重复输入字符串以中位为第1位,并检查右和左字符. 我们将有两个全球变量来保存palindrome的开始和结束位置. 我们还需要检查是否已经找到一个更长的palindrome,因为我们可以在给定的字符串中找到多个palindromes。
1package com.journaldev.util;
2
3public class LongestPalindromeFinder {
4
5 public static void main(String[] args) {
6 System.out.println(longestPalindromeString("1234"));
7 System.out.println(longestPalindromeString("12321"));
8 System.out.println(longestPalindromeString("9912321456"));
9 System.out.println(longestPalindromeString("9912333321456"));
10 System.out.println(longestPalindromeString("12145445499"));
11 System.out.println(longestPalindromeString("1223213"));
12 System.out.println(longestPalindromeString("abb"));
13 }
14
15 static public String intermediatePalindrome(String s, int left, int right) {
16 if (left > right) return null;
17 while (left >= 0 && right < s.length()
18 && s.charAt(left) == s.charAt(right)) {
19 left--;
20 right++;
21 }
22 return s.substring(left + 1, right);
23 }
24
25 // O(n^2)
26 public static String longestPalindromeString(String s) {
27 if (s == null) return null;
28 String longest = s.substring(0, 1);
29 for (int i = 0; i < s.length() - 1; i++) {
30 //odd cases like 121
31 String palindrome = intermediatePalindrome(s, i, i);
32 if (palindrome.length() > longest.length()) {
33 longest = palindrome;
34 }
35 //even cases like 1221
36 palindrome = intermediatePalindrome(s, i, i + 1);
37 if (palindrome.length() > longest.length()) {
38 longest = palindrome;
39 }
40 }
41 return longest;
42 }
43
44}
Below image shows the output of the above longest palindrome java program. We can improve the above code by moving the palindrome and longest lengths check into a different function. However, I have left that part for you. :) Please let me know if there are any other better implementations or if it fails in any case.
您可以从我们的 GitHub 存储库下载完整的示例代码。