Java 题解 | #编号子回文I#
编号子回文I
https://www.nowcoder.com/practice/db5995cd4783483f8b9f7a9e3b3a479f
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 */ public String longestPalindrome (String s) { // write code here int len = 0; int ans = 0; for (int i = 0; i < s.length(); i++) { for (int l = i - 1, r = i + 1, t = 0; l >= 0 && r <= s.length() - 1; l--, r++, t++) { if (s.charAt(l) != s.charAt(r)) { if (len < (2 * t) + 1) { ans = l + 1; len = 2 * t + 1; } break; } if (l == 0 || r == s.length() - 1) { if (len < (2 * t) + 3) { ans = l; len = 2 * t + 3; } break; } } for (int l = i, r = i + 1, t = 0; l >= 0 && r <= s.length() - 1; l--, r++, t++) { if (s.charAt(l) != s.charAt(r)) { if (len < 2 * t) { ans = l + 1; len = 2 * t; } break; } if (l == 0 || r == s.length() - 1) { if (len < (2 * t) + 2) { ans = l; len = 2 * t + 2; } break; } } } StringBuilder anss = new StringBuilder(); for (int i = ans; i <= ans + len - 1; i++) { anss.append(s.charAt(i)); } return anss.toString(); } }
编程语言是Java。
该题考察的知识点:
- 字符串处理
- 中心扩展法
代码的文字解释:
longestPalindrome
函数接受一个字符串s
作为参数,用于找出最长回文子串。- 初始化变量
len
和ans
,分别用于记录最长回文子串的长度和起始位置。 - 使用两层循环遍历字符串
s
,以每个字符为中心向两边扩展,分别检查奇数长度和偶数长度的回文子串。 - 在循环中,使用指针
l
和r
分别表示左右两侧的索引,当左右字符不相等时,判断当前回文子串的长度,并更新len
和ans
。 - 循环结束后,根据
ans
和len
构建最长回文子串,并返回结果。