https://leetcode.com/problems/длинная-палиндромная-подстрока/
Это вопрос, который я планировал решить с некоторого времени. Первоначальные решения, которые приходят на ум, не столь эффективны. Однако, как только вы действительно задумаетесь о свойстве палиндромной строки, этот вопрос станет действительно легко решить.
Использование массива символов само по себе не важно с точки зрения понимания. Вместо этого вы можете обойтись просто передачей строки.
class Solution { public String longestPalindrome(String s) { if (s == null || s.length() < 1) return ""; int st=0, e = 0; char[] sChar = s.toCharArray(); int strLength = s.length(); for( int i = 0; i < strLength; i++){ int strLen1 = getPalinLen(sChar, i, i, strLength); int strLen2 = getPalinLen(sChar, i, i+1, strLength); int maxLen = Math.max(strLen1, strLen2); if(maxLen > e - st) { st = i - (maxLen - 1) / 2; e = i + maxLen / 2; } } return s.substring(st, e + 1); } private int getPalinLen(char[] sChar, int left, int right, int strLength) { int L = left; int R = right; while(L >= 0 && R < strLength && sChar[L] == sChar[R]){ L--; R++; } return R-L-1; } }