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 构建最长回文子串,并返回结果。
全部评论

相关推荐

在努力的外卷侠很靠谱:怎么,大家都没保底吗?我这美团已经入职了,不说了,系统派单了。
点赞 评论 收藏
分享
在评审的大师兄很完美:像这种一般就是部门不匹配 转移至其他部门然后挂掉 我就是这样被挂了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务