LeetCode150道面试经典题--验证回文串(简单)

简介: 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

 

1.题目

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true;否则,返回false

2.示例

image.gif编辑


3.思路

双指针:

先将字符串通过String的LowerCase方法让字符串所有字符变为小写字符,再通过设置头尾两个指针放置于字符串的头尾,在遍历字符串时候,头尾指针先进行遍历找到合法字符(通过方法Character.isLetterOrDigit方法就能识别该字符是否合法)进行比较。举例来说比如一个字符串

“a ) s a (” 那么头尾指针第一个找到的就是a进行比较,如果相等则头尾指针往中心靠拢一格,直到指针相等或者头指针小于尾部指针

4.代码

LeetCode代码:

class Solution {
    public boolean isPalindrome(String s) {
      String str = s.toLowerCase();
        int pre = 0;
        int Des = str.length() - 1;
        while (pre < Des) {
            while (pre < Des && !Character.isLetterOrDigit(str.charAt(pre))) {
                pre++;
            }
            while (pre < Des && !Character.isLetterOrDigit(str.charAt(Des))) {
                Des--;
            }
            if (str.charAt(pre) != str.charAt(Des)) {
                return false;
            }
            pre++;
            Des--;
        }
        return true;
    }
}

image.gif

image.gif编辑

总结:时间复杂度为O(n) 空间复杂度为 O(1)

详细案例代码:

package LeetCode1001;
public class javaDemo {
    public static void main(String[] args) {
        String s = "A man, a plan, a canal: Panama";
//        返回值
        boolean flag = true;
//        将字符串转为小数
       String str = s.toLowerCase();
//        设置头尾指针
        int pre=0; int des=str.length()-1;
        while (pre<=des){
//            在找到相应的合法字符前一直靠拢
            while (pre<des && !Character.isLetterOrDigit(str.charAt(pre))){
                pre++;
            }
            while (des>pre && !Character.isLetterOrDigit(des)){
                des--;
            }
//            当两个指针都各就位时候则开始比较,如果字符不匹配则直接返回flase
            if (str.charAt(pre)!=str.charAt(des)){
                flag = false;
                break;
            }
//            如果两个有效位都一样则继续往中间靠拢
            pre++;des--;
        }
//        输出返回值
        System.out.println(flag);
    }
}

image.gif


目录
相关文章
|
2月前
【LeetCode 40】98.验证二叉搜索树
【LeetCode 40】98.验证二叉搜索树
13 0
|
4月前
|
Python
【Leetcode刷题Python】946. 验证栈序列
LeetCode题目“946. 验证栈序列”的Python解决方案,通过模拟栈的压入和弹出操作来验证给定的两个序列是否能通过合法的栈操作得到。
32 6
|
4月前
|
Python
【Leetcode刷题Python】131. 分割回文串
LeetCode题目131的Python编程解决方案,题目要求将给定字符串分割成所有可能的子串,且每个子串都是回文串,并返回所有可能的分割方案。
29 2
|
5月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
5月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
5月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
6月前
|
SQL 算法 大数据
深入解析力扣176题:第二高的薪水(子查询与LIMIT详解及模拟面试问答)
深入解析力扣176题:第二高的薪水(子查询与LIMIT详解及模拟面试问答)
|
6月前
|
算法 数据挖掘 大数据
深入解析力扣172题:阶乘后的零(计算因子5的方法详解及模拟面试问答)
深入解析力扣172题:阶乘后的零(计算因子5的方法详解及模拟面试问答)
|
6月前
|
算法 数据挖掘 大数据
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
|
6月前
力扣经典150题第二十五题:验证回文串
力扣经典150题第二十五题:验证回文串
38 0