验证回文串

题目描述

一个字符串从前往后读和从后往前读相等,只包括字母和数字。

示例:1

输入:"hello,how are you?u,oy。era w,oh,oll eh";
输出:true

示例:2

输入:"hello";
输出:false

题目解析

解题思路是先全部转换为小写,设定两个指针,一个从前往后读,一个从后往前读。
逐个匹配,遇到特殊字符跳过。

代码实现

public static boolean solution(String msg){

    int start = 0,end = msg.length() - 1;
    msg = msg.toLowerCase();
    while (start < end) {
        if (isDigitOrAphla(msg.charAt(start)) && isDigitOrAphla(msg.charAt(end))) {
            if (msg.charAt(start) == msg.charAt(end)) {
                start++;
                end--;
                continue;
            }else {
                return false;
            }
        }
        if (!isDigitOrAphla(msg.charAt(start))) {
            start++;
        }
        if (!isDigitOrAphla(msg.charAt(end))) {
            end--;
        }
    }
    if (start >= end) {
        return true;
    }else {
        return false;
    }

}
//判断是不是字母或者数字
private static boolean isDigitOrAphla(char p){

    if ((p >= 'a' && p <= 'z')) {
        return true;
    } else if ((p >= 'A' && p <= 'Z')) {
        return true;
    } else if ((p >= '0' && p <= '9')) {
        return true;
    }else {
        return false;
    }

}

复杂度的计算

一共只有一个循环,最大循环了n/2次,所以时间复杂度为O(n),空间复杂度为O(1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值