ARTS-14--回文字符串的解法

简介: ARTS-14--回文字符串的解法

Algorithm


题目概述:


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

For example,

"A man, a plan, a canal: Panama"is a palindrome.

"race a car"is not a palindrome.


Note:


Have you consider that the string might be empty? This is a good question to ask during an interview.

For the purpose of this problem, we define empty string as valid palindrome.


import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
       public boolean isPalindrome(String s) {
        if (s == null) {
            return false;
        }
        s = getValidateStr(s);
        int len = s.length();
        char[] chars = s.toCharArray();
        String[] arr = new String[len];
        for (int p=0;p<chars.length;p++) {
            arr[p]= String.valueOf(chars[p]);
        }
        //偶数
        if (len % 2 == 0) {
            int leftIndex = len / 2 - 1;
            int rightIndex = len / 2;
            for (int l = leftIndex, r = rightIndex; l >= 0 && r < len; l--, r++) {
                if (!(arr[l].equals(arr[r]))) {
                    return false;
                }
            }
        } else {
            //奇数
            int midIndex = len / 2;
            for (int i = midIndex - 1, j = midIndex + 1; i >= 0 && j < len; i--, j++) {
                if (!(arr[i].equals(arr[j]))) {
                    return false;
                }
            }
        }
        return true;
    }
    /**
     * 判断是否是合法字符
     *
     * @return
     */
    public String getValidateStr(String str) {
          str=str.toUpperCase();
        String regx = "[A-Za-z0-9]*";
        Matcher m = Pattern.compile(regx).matcher(str);
        StringBuilder stb = new StringBuilder();
        while (m.find()) {
            int start = m.start();
            int end = m.end();
            String matchStr = str.substring(start, end);
            stb.append(matchStr);
        }
        return stb.toString();
    }
}


目录
相关文章
|
6月前
|
机器学习/深度学习
【每日一题Day196】LC2106摘水果 | 枚举+前缀和数组 同向双指针+二分查找
【每日一题Day196】LC2106摘水果 | 枚举+前缀和数组 同向双指针+二分查找
56 0
初学算法之动态规划---求最长公共子串
初学算法之动态规划---求最长公共子串
|
人工智能
Leecode 680 验证回文串 II 双指针法
第一次报错是因为没有判断删除一个字符后的情况 第二次报错是因为没有添加是删除一个字符而不是删除多个字符能不能构成回文串的条件 第三次报错是因为没有考虑先删除左边还是右边的问题,有些奇葩它先删除左边不可以通过,得先删除右边
|
算法 Java
判断回文串(hdu 2029)双指针法
题目来自 hdu 杭州电子科技大学的一个算法网站
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
|
算法
【Day24】 LeetCode算法题 (注释详细+解题思路)[43. 字符串相乘 ] [1800. 最大升序子数组和]
学习 (注释详细+解题思路)[43. 字符串相乘 ] [1800. 最大升序子数组和]。
131 0
【Day24】 LeetCode算法题 (注释详细+解题思路)[43. 字符串相乘 ] [1800. 最大升序子数组和]
|
存储 算法 索引
ARTS-9-算法练习-动态规划之字符串匹配
ARTS-9-算法练习-动态规划之字符串匹配
90 0
HDOJ 1282 回文数猜想(回文串类)
HDOJ 1282 回文数猜想(回文串类)
105 0