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月前
【每日一题Day150】LC1616分割两个字符串得到回文串 | 双指针+贪心
【每日一题Day150】LC1616分割两个字符串得到回文串 | 双指针+贪心
37 0
|
6月前
|
测试技术 Perl
【动态规划】【记忆化搜索】【回文】1312让字符串成为回文串的最少插入次数
【动态规划】【记忆化搜索】【回文】1312让字符串成为回文串的最少插入次数
|
6月前
|
C++ 索引
c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)
c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)
66 0
代码随想录 Day7 字符串1 LeetCode T344反转字符串 T541 反转字符串II 151翻转字符串的单词
代码随想录 Day7 字符串1 LeetCode T344反转字符串 T541 反转字符串II 151翻转字符串的单词
40 0
|
6月前
|
C++ Python Java
Java每日一练(20230503) 外观数列、有序数组转BST、翻转字符串里的单词
Java每日一练(20230503) 外观数列、有序数组转BST、翻转字符串里的单词
53 0
Java每日一练(20230503) 外观数列、有序数组转BST、翻转字符串里的单词
|
6月前
|
canal Java
java字符串练习题7、验证回文串
java字符串练习题7、验证回文串
88 0
|
6月前
代码随想录 Day47 动态规划15 LeetCode T583 两个字符串的删除操作 T72 编辑距离
代码随想录 Day47 动态规划15 LeetCode T583 两个字符串的删除操作 T72 编辑距离
61 0
|
算法 Java
判断回文串(hdu 2029)双指针法
题目来自 hdu 杭州电子科技大学的一个算法网站
|
人工智能
Leecode 680 验证回文串 II 双指针法
第一次报错是因为没有判断删除一个字符后的情况 第二次报错是因为没有添加是删除一个字符而不是删除多个字符能不能构成回文串的条件 第三次报错是因为没有考虑先删除左边还是右边的问题,有些奇葩它先删除左边不可以通过,得先删除右边
|
算法
LeetCode每日1题--反转字符串II
LeetCode每日1题--反转字符串II
89 0