zoukankan      html  css  js  c++  java
  • 算法------验证回文串

    验证回文串
         给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
    
         说明:本题中,我们将空字符串定义为有效的回文串。
    
         示例 1:
    
         输入: "A man, a plan, a canal: Panama"
         输出: true
         示例 2:
    
         输入: "race a car"
         输出: false
    

    这个算法,我写的第一遍是39ms, 后来看到别人的优化点,写到了4-6ms

    算法是一个不断优化的过程,也是一个不断学习进步的过程。算法是一个很好玩的过程。

    第一遍:

    class Solution {
        public boolean isPalindrome(String s) {
            String string = s.replaceAll(" ", "");
            int length = string.length();
            if (length == 0 || length == 1) {
                return true;
            }
            for (int i = 0,j =length-1; j > 0 && j>i;) {
                char headChar = string.charAt(i);
                if (!Character.isDigit(headChar) &&  !Character.isAlphabetic(headChar)) {
                    i++;
                    continue;
                }
    
                char endChar = string.charAt(j);
                if (!Character.isDigit(endChar) &&  !Character.isAlphabetic(endChar)) {
                    j--;
                    continue;
                }
                if (headChar != endChar && (Character.isLowerCase(headChar)? Character.toUpperCase(headChar) : Character.toLowerCase(headChar)) != endChar) {
                    return false;
                }else {
                    i++;
                    j--;
                }
    
            }
            return true;
    
        }
    
    }
    

    第四遍:

    public static boolean isPalindrome(String s) {
    int length = s.length();
            if (length == 0 || length == 1) {
                return true;
            }
            for (int i = 0,j =length-1; j>i;) {
                char headChar = s.charAt(i);
                if (headChar >= 'A' && headChar<= 'Z'){//抓换成小写
                    headChar +=32;
                }else if (! ((headChar >= 'a' && headChar<= 'z')  || (headChar >= '0' && headChar<='9'))){
                    i++;
                    continue;
                }
    
    
                char endChar = s.charAt(j);
                if (endChar >= 'A' && endChar<= 'Z'){//抓换成小写
                    endChar +=32;
                }else if (! ((endChar >= 'a' && endChar<= 'z')  || (endChar >= '0' && endChar<='9'))){
                    j--;
                    continue;
                }
    
                if (headChar != endChar ) {
                    return false;
                }else {
                    i++;
                    j--;
                }
    
            }
            return true;
            }
    

    网上最优的算:

    class Solution {
        public boolean isPalindrome(String s) {
            if(s == null || s.length() == 0){
                return true;
            }
            char[] copy = s.toCharArray();
            char[] letterAndNums = new char[copy.length];
            int index = 0;
            for(int i = 0; i < copy.length; i++){
                if((copy[i] >= 'a' && copy[i] <= 'z')||(copy[i] >= '0' && copy[i] <= '9')){
                    letterAndNums[index++] = copy[i];
                }else if((copy[i] >= 'A' && copy[i] <= 'Z')){
                    letterAndNums[index++] = (char)(copy[i] + 32);
                }
            }
            letterAndNums = Arrays.copyOfRange(letterAndNums, 0, index);
            int start = 0, end = letterAndNums.length - 1;
            while(start < end){
                if(letterAndNums[start++] != letterAndNums[end--]){
                    return false;
                }
            }
            return true;
        }
    }
    

    加油!

  • 相关阅读:
    视频4K技术的解读
    C语言野指针
    获取一个整数所有的质因数(C语言实现)
    乘法口诀表(C语言实现)
    完全平方数(C语言实现)
    Socket网络编程系列教程序
    求1-2/3+3/5-4/7+......49/97和(C语言实现)
    反射
    Cloneable接口和Object的clone()方法
    Comparable和Comparator的区别
  • 原文地址:https://www.cnblogs.com/caoxinyu/p/10568512.html
Copyright © 2011-2022 走看看