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构建最长回文子串,并返回结果。
查看9道真题和解析