博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode:Valid Palindrome - 回文字符串
阅读量:6088 次
发布时间:2019-06-20

本文共 3307 字,大约阅读时间需要 11 分钟。

hot3.png

1、题目名称

Valid Palindrome(回文字符串)

2、题目地址

3、题目内容

英文:Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

中文:给出一个字符串,只考虑字母和数字,判断该字符串是否为回文字符串

例如:

"A man, a plan, a canal: Panama" 是一个回文字符串

"race a car" 不是一个回文字符串

4、题目分析

如果要判断一个字符串是否是回文字符串,可以两个变量,从两侧开始比较有效的字符是否相等。这里有效的字符是指 'a'-'z'、'A'-'Z'、'0'-'9' 这三个区间内的字符。

5、解题方法1

可以将字符串中有效的字符,写入一个链表,再将链表转化为数组,直接判断数组两侧对称位置的字符是否匹配。

实现的Java代码如下:

import java.util.LinkedList;/** * 功能说明:LeetCode 125 - Valid Palindrome * 开发人员:Tsybius2014 * 开发时间:2015年8月4日 */public class Solution {        /**     * 检测一个字符串是否是回文(忽略大小写,只考虑英文和数字)     * @param s 被检测字符串     * @return     */    public boolean isPalindrome(String s) {                if (s == null) {            return false;        }                if (s.trim().isEmpty()) {            return true;        }                //将有效字符选出并存入链表        LinkedList
linkedList = new LinkedList
(); for (char ch : s.toCharArray()) { if ((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')) { linkedList.add(ch); } else if (ch >= 'A' && ch <= 'Z') { linkedList.add((char)(ch + 'a' - 'A')); } } if (linkedList.size() <= 1) { return true; } //将链表转换为数组比较 Object[] array = linkedList.toArray(); for (int i = 0; i <= array.length / 2; i++) { if (!array[i].equals(array[array.length - 1 - i])) { return false; } } return true; }}

6、解题方法2

选择两个数字i和j,直接从字符串的首和尾开始循环,直到i>=j为止。如果出现两侧对应字符不匹配的情况,则直接判定此字符串不是回文字符串。全部字符考察完毕后,如果未发现对应位置字符不匹配的情况,则认为此字符串是回文字符串。

实现的Java代码如下:

import java.util.LinkedList;/** * 功能说明:LeetCode 125 - Valid Palindrome * 开发人员:Tsybius2014 * 开发时间:2015年8月4日 */public class Solution {        /**     * 检测一个字符串是否是回文(忽略大小写,只考虑英文和数字)     * @param s 被检测字符串     * @return     */    public boolean isPalindrome(String s) {        if (s == null) {            return false;        }                if (s.trim().isEmpty()) {            return true;        }                int i = 0;        int j = s.length() - 1;                int chLeft; //左侧字符        int chRight; //右侧字符        while (i < j) {                        chLeft = s.charAt(i);            chRight = s.charAt(j);            //既非英文也非数字的字符直接忽略            if (!(chLeft >= 'A' && chLeft <= 'Z') &&                !(chLeft >= 'a' && chLeft <= 'z') &&                !(chLeft >= '0' && chLeft <= '9')) {                i++;                continue;            }            if (!(chRight >= 'A' && chRight <= 'Z') &&                !(chRight >= 'a' && chRight <= 'z') &&                !(chRight >= '0' && chRight <= '9')) {                j--;                continue;            }                                    //大写英文字母转成小写            if (chLeft >= 'A' && chLeft <= 'Z') {                chLeft = chLeft + 'a' - 'A';            }                        if (chRight >= 'A' && chRight <= 'Z') {                chRight = chRight + 'a' - 'A';            }                        //比较字符            if (chLeft != chRight) {                return false;            } else {                i++;                j--;            }        }                return true;    }}

END

转载于:https://my.oschina.net/Tsybius2014/blog/488436

你可能感兴趣的文章
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>
Struts2与Struts1区别
查看>>
网站内容禁止复制解决办法
查看>>
Qt多线程
查看>>
我的友情链接
查看>>
想说一点东西。。。。
查看>>
css知多少(8)——float上篇
查看>>
NLB网路负载均衡管理器详解
查看>>
水平添加滚动条
查看>>
PHP中”单例模式“实例讲解
查看>>
VS2008查看dll导出函数
查看>>
VM EBS R12迁移,启动APTier . AutoConfig错误
查看>>
atitit.细节决定成败的适合情形与缺点
查看>>
Mysql利用binlog恢复数据
查看>>
我的友情链接
查看>>
用yum安装mariadb
查看>>
一点IT"边缘化"的人的思考
查看>>
WPF 降低.net framework到4.0
查看>>
搭建一个通用的脚手架
查看>>