[刷题班] LeetCode125. 验证回文串
题目描述
思路:左右指针
只考虑数字和字母
字母的话需要全部转化为小写
然后使用左右指针判断是否是回文串
方法一:
class Solution {
public boolean isPalindrome(String s) {
List<Character> list = new ArrayList<>();
for (char c : s.toCharArray()) {
if (c >= 'A' && c <= 'Z') {
list.add((char)(c + 32));
} else if (c >= 'a' && c <= 'z') {
list.add(c);
} else if (c >= '0' && c <= '9') {
list.add(c);
}
}
int size = list.size() - 1;
// 左右指针
for (int left = 0, right = size; left < right; left ++, right --) {
if (list.get(left) != list.get(right)) {
return false;
}
}
return true;
}
}
时间复杂度:O(n)、空间复杂度:O(n)
方法二:
class Solution {
public boolean isPalindrome(String s) {
int left = 0, right = s.length() - 1;
while (left < right) {
// 忽略left左边无效字符,在数字和字母字符停下
while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
left ++;
}
// 忽略right右边无效字符
while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
right --;
}
if (left < right) {
if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
return false;
}
left ++;
right --;
}
}
return true;
}
}
时间复杂度:O(n)、空间复杂度:O(1)
Character.isLetterOrDigit():判断是否是字母或者数字
Character.toLowerCase():转小写
Character.toLowerCase(char ch) 方法用于将指定的字符参数转换为小写。对于数字字符,它不会有任何影响,即数字字符保持不变。这是因为数字字符在小写和大写之间没有大小写之分。
本文作者:Ac_c0mpany丶
本文链接:https://www.cnblogs.com/keyongkang/p/17963831
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步