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

相关推荐

Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务