Day1 coding two palindrome

题目:Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
翻译 :给定一个字符串,判断它是否回文,只考虑数字字母字符并忽略大小写。
比如:“A man, a plan, a canal: Panama” is a palindrome.
而"race a car" is not a palindrome.
其实就是正着读和反着读一样
备注:面试者可以会问这样的问题:
  问:空字符串算是回文字符串吗?
  答:在这个问题里,我们将空字符串运定义为回文字符串。

先考虑符合大小写和符号相同原则的情况下回文的代码!

//判断是否为回文字符串,其中考虑了大小写和符号(需要完全一致)
public class Palindrome {
	public static void main(String[] args) {
		String s1 = "A man, a plan, a canal: Panama";
		String s = "abcdedcba";
		boolean bo = isPalindrome(s);
		System.out.println(bo);
	}
	private static boolean isPalindrome(String s) {
		int N = s.length();
		for (int i = 0; i < N; i++) {
			if(s.charAt(i) == s.charAt(N-1-i)) {
				return true;
			}
			return false;
		}
		return false;
	}
}

但是,如果跳过非字母和非数字字符,则应使用 Character. isLetterOrDigit( ) 方法。
不区分大小写,所以都转化为小写来判断是否相等,用到了 Character.toLowerCase( ) 方法。
JDK1.8中

static int toLowerCase(int codePoint)
使用UnicodeData文件中的大小写映射信息将字符(Unicode代码点)参数转换为小写
static boolean isLetterOrDigit(char ch)
确定指定的字符是字母还是数字,返回true ,字符被认为是字母或数字。

public class Palindrome {

	public static void main(String[] args) {
		String s  = "A man, a plan, a canal: Panama";
		String s1 = "abcdedcba";
		boolean bo = isPalindrome(s);
		System.out.println(bo);

	}

	private static boolean isPalindrome(String s) {
		int start = 0;
		int end = s.length()-1;
		while (start <= end) {
			while(!Character.isLetterOrDigit(s.charAt(start))) {
				start ++;
			}
			while(!Character.isLetterOrDigit(s.charAt(end))) {
				end --;
			}
			
			if (Character.toLowerCase(s.charAt(start)) != Character.toLowerCase(s.charAt(end))) {
				return false;
			}
			start ++;
			end --;
		}
		return true;
	}
}

容易出错的的地方

while(!Character.isLetterOrDigit(s.charAt(start))) {
start ++;
}
while(!Character.isLetterOrDigit(s.charAt(end))) {
end --;
}
应该写成循环而不是判断

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值