Java 中字符串中最长的重码子串

一个字符串中最长的帕林德罗姆基层是非常常见的( / 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. longest palindrome substring in a string in java 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 存储库下载完整的示例代码。

Published At
Categories with 技术
Tagged with
comments powered by Disqus