验证回文串(24)

题目描述

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串

第一次解题

class Solution {
    
    
    public boolean isPalindrome(String s) {
    
           
        char[] temp = s.toLowerCase().toCharArray(); //小写化 再分出去
        List<Character> ch = new ArrayList<>();
        for(int i =0;i<temp.length;i++){
    
    
            int c = temp[i];
            if(( c> 96 && c <123)||(c > 47 && c <58)){
    
    
                ch.add(temp[i]);
            }
        }
        for(int i =0,j=ch.size()-1;i<=j;i++,j--){
    
    
                if(ch.get(i) != ch.get(j)){
    
    
                   return false;
                }
        }
        return true;

    }
}

题解

一、api

class Solution {
    
    
    public boolean isPalindrome(String s) {
    
    
        StringBuffer sgood = new StringBuffer();
        int length = s.length();
        for (int i = 0; i < length; i++) {
    
    
            char ch = s.charAt(i);
            if (Character.isLetterOrDigit(ch)) {
    
    
                sgood.append(Character.toLowerCase(ch));
            }
        }
        StringBuffer sgood_rev = new StringBuffer(sgood).reverse();
        return sgood.toString().equals(sgood_rev.toString());
    }
}

二、api+双指针

class Solution {
    
    
    public boolean isPalindrome(String s) {
    
    
        int n = s.length();
        int left = 0, right = n - 1;
        while (left < right) {
    
    
            while (left < right && !Character.isLetterOrDigit(s.charAt(left))) {
    
    
                ++left;
            }
            while (left < right && !Character.isLetterOrDigit(s.charAt(right))) {
    
    
                --right;
            }
            if (left < right) {
    
    
                if (Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))) {
    
    
                    return false;
                }
                ++left;
                --right;
            }
        }
        return true;
    }
}

总结-StringBuffer、大小写

StringBuffer
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象

append(String s)
StringBuffer(str).reverse() 元素逆序
delete(int start, int end)
insert(int offset, int i)
replace(int start, int end, String str)

Character.isLetterOrDigit(ch) 确定指定字符ch是一个字母或数字,是的话则返回true。
Character.toLowerCase(ch) 将字符串转换为小写

Guess you like

Origin blog.csdn.net/qq_51985653/article/details/120924851