【初级算法】-- 8.验证回文字符串(利用双指针法)

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

说明:本题中,我们将空字符串定义为有效的回文串。
(“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串)

示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true

示例 2:
输入: “race a car”
输出: false

/**
 * 判断是否是回文字符串
 *
 * @author 天赋吉运-杨晓慧
 * @create 2019-04-20 20:28
 */
public class isPalindrome {

    public static void main(String[] args) {
        String s1="A man, a plan, a canal: Panama";
        String s2="race a car";
        // 这里偷个懒,用toLowerCase统一转成小写了
        boolean palindrome1 = isPalindrome(s1.toLowerCase());
        boolean palindrome2 = isPalindrome(s2.toLowerCase());
        System.out.println("s1验证结果:"+palindrome1);
        System.out.println("s2验证结果: "+palindrome2);
    }

    /**
     * 利用双指针法验证回文串
     * @param s
     * @return
     */
    public static boolean isPalindrome(String s) {
        String s1= new String(s);
        char[] c=s1.toCharArray();
        int i=0;
        int j=c.length-1;
        while (i<j){
            // 当字符不合法时,前面的指针往后指向下一个;后面的指针往前指向前一个
            while (!isLegal(c[i])) i++;
            while (!isLegal(c[j])) j--;
            // 比较两个字符是否相等,如果不相等直接返回false
            if (c[i]!=c[j]) {
                return false;
            }
            // 前后两个字符相等时候,前面的指针后移,后面的指针前移,准备进行下一轮比较
            i++;
            j--;
         }
        return true;
    }

    /**
     * 判断是否是非法字符,如空格标点等
     * @param ch 传入
     * @return 是否为特殊字符
     */
    public static boolean isLegal(char ch){
        return (ch>='a'&&ch<='z') || (ch>='0' && ch<='9');
    }

}

在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页