✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)
文章目录
- 1. 题目描述
- 2. 输入描述
- 3. 输出描述
- 4. Java算法源码
- 5. 测试
- 6.解题思路
1. 题目描述
给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。
所谓回文串,指左右对称的字符串。
所谓子串,指一个字符串删掉其部分前缀和后缀(也可以不删)的字符串
数据范围:字符串长度1≤s≤350
进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(n)\O(n)
2. 输入描述
输入一个仅包含小写字母的字符串。
3. 输出描述
返回最长回文子串的长度。
4. Java算法源码
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int max = 0;
for (int i = 0; i < str.length(); i++) {
for (int j = str.length(); j > i; j--) {
if (isPalindrome(str.substring(i, j))) {
max = Math.max(max, j - i);
}
}
}
System.out.print(max);
}
private static boolean isPalindrome(String s) {
return s.equals(new StringBuilder(s).reverse().toString());
}
5. 测试
6.解题思路
- 首先通过输入获取一个仅包含小写字母的字符串。
- 定义一个变量
max
,用于记录最长回文子串的长度,初始化为0。 - 使用两层循环遍历字符串的所有可能子串,从左至右逐个取子串。
- 对于每个子串,使用
isPalindrome
函数判断是否为回文串。 - 若是回文串,则更新
max
的值为当前子串长度和max
中的较大值。 - 循环结束后,
max
的值即为最长回文子串的长度。