zoukankan      html  css  js  c++  java
  • leecode刷题(15)-- 验证回文字符串

    leecode刷题(15)-- 验证回文字符串

    验证回文字符串

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

    说明:本题中,我们将空字符串定义为有效的回文串。

    示例 1:

    输入: "A man, a plan, a canal: Panama"
    输出: true
    

    示例 2:

    输入: "race a car"
    输出: false
    

    思路:

    刚开始和上一题一样,我也没理解“回文字符串”是什么意思,后来想了下,“回文字符串”其实就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文字符串。

    理解了这个,接下来我们来讲解思路:

    1. 去除字符串中的特殊字符,保留字母和数字,因为题目中忽略字母的大小写,所以我们也将字母全部转为小写好了。这里可以使用 replaceAll()toLowerCase() 方法;
    2. 定义和初始化两个游标 left = 0right = s.length() - 1 ,分别指向字符串的开头和结尾;
    3. 我们设置一个while循环,比较 s[left] == s[rigth],如果是回文字符串,那么按从左往右和从右往左的顺序的字母或数字应该是依次相等的;
    4. 如果相等,则让游标 left 和 rigth 加 1 后再次比较对应的字母或数字是否相等;如果不相等,则跳出循环返回 false。
    5. 相等就重复执行 步骤4 的过程,直到跳出循环。

    代码如下:

    class Solution {
        public boolean isPalindrome(String s) {
            if(s == null) return false;
            s = s.replaceAll("[^a-z^A-Z^0-9]", "").toLowerCase();
    		int left = 0, right = s.length() - 1;
    		char[] str = s.toCharArray();
    		while(left <= right){
                if(str[left] != str[right]){
                    return false;
                }
                left++;
                right--;
            }
            return true;
        }
    }
    

    因为题目中说将空字符串定义为有效的回文串,所以我们就不需要判断空字符串啦,但是 s == null 并不等于 s.length() == 0 。这里延伸出一个知识点:

    Java空字符串与null区别:

    1、类型
    null表示的是一个对象的值,而并不是一个字符串。例如声明一个对象的引用,String a = null ;
    ""表示的是一个空字符串,也就是说它的长度为0。例如声明一个字符串String str = "" ;

    2、内存分配
    String str = null ; 表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间;
    String str = ""; 表示声明一个字符串类型的引用,其值为""空字符串,这个str引用指向的是空字符串的内存空间;

  • 相关阅读:
    loj #143. 质数判定
    Quadratic Residues POJ
    P2155 [SDOI2008]沙拉公主的困惑
    P3868 [TJOI2009]猜数字
    P3704 [SDOI2017]数字表格
    P4449 于神之怒加强版
    P2568 GCD
    P1891 疯狂LCM
    loj#6229 这是一道简单的数学题
    P3768 简单的数学题 杜教筛+推式子
  • 原文地址:https://www.cnblogs.com/weixuqin/p/10422135.html
Copyright © 2011-2022 走看看