Valid Palindrome

14 篇文章 0 订阅
1 篇文章 0 订阅

题目:判断字符串是否是回文字符串,只考虑字符串中的数字和字符,不考虑标点符号

例如:"A man, a plan, a canal: Panama"是回文字符串
"race a car" 不是回文字符串

方法1:使用额外的内存空间    注意:测试时输入的字符串是带""引号的

public class Solution {
    public boolean isPalindrome(String s) {
        //先把字符串都转成小写
        String str = s.toLowerCase();
        StringBuilder sb = new StringBuilder();
        //把有效字符保存到sb中
        for (int i = 0; i < str.length(); i++) {
			if((str.charAt(i) >= 'a' && str.charAt(i) <= 'z')
					|| (str.charAt(i) >= '0' && str.charAt(i) <= '9')){
				sb.append(str.charAt(i));
			}
		}
		//如果sb的长度为0.则说明没有有效字符,该字符串相当于null串,空串是回文字符串
		if (sb.length() == 0) {
			return true;
		}
		//首尾两个指针对比
        for (int i = 0, j = sb.length() - 1; i <= j; i++,j--) {
			if (sb.charAt(i) != sb.charAt(j)) {
				return false;
			}
		}
		return true;
    }
}


方法2,不使用额外内存,用首尾两个指针判断

public class Solution {
    public boolean isPalindrome(String s) {
        s = s.toLowerCase();
        int start = 0;
        int end = s.length() - 1;
        while (start <= end) {
        	//判断首字符是否为有效字符
			if (!isValid(s.charAt(start))) {
				start++;
				continue;
			}
			//判断尾字符是否为有效字符
			if (!isValid(s.charAt(end))) {
				end--;
				continue;
			}
			//判断首尾两个字符是否相等
			if (s.charAt(start) != s.charAt(end)) {
				return false;
			}
			start++;
			end--;
		}
        
		return true;
    }
	public static boolean isValid(char c) {
		if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9')) {
			return true;
		}
		return false;
	}
}


.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值