力扣简125 验证回文串

String的内置操作 包括了StringBuffer和Character

最开始自己写的既没考虑空字符串,又没考虑大小写,也没吃掉空格和逗号等。然后在提交过程中报错才知道修改。

package leetcode01;

public class Solution125 {
    public static boolean isPalindrome(String s) {
        s = s.toUpperCase();//转大写
        for(int i=0,j=s.length()-1;i<=j;i++,j--) {
            while((s.charAt(i)<'0' || s.charAt(i)>'Z' || (s.charAt(i)>'9'&&s.charAt(i)<'A'))&&i<j)    
                //吃除字母和数字的其他所有,    而对于光空格的可能会导致i不断增加越界,故用i<j限制
                i++;
            while((s.charAt(j)<'0' || s.charAt(j)>'Z' || (s.charAt(j)>'9'&&s.charAt(j)<'A'))&&j>i)
                j--;
            if(s.charAt(i)!=s.charAt(j)) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.print(isPalindrome("  "));
    }

}

 

题解1:熟练字符串相关操作的使用:

(string)s.toUpperCase  全部转为大写

   StringBuffer buffer=new StringBuffer()  用于缓冲string,最后需要用buffer.toString();转回字符串

   Character.isLetterOrDigit((char)ch)  用于判断字符是否为数字或字母

   buffer.reverse 用stringBuffer内置反转函数可以实现string的反转(需要转为string)

    //题解一:为了熟悉相关字符串API的使用
    public static boolean isPalindrome(String s) {
        s=s.toUpperCase();
        StringBuffer buffer=new StringBuffer();
        for(int i=0;i<s.length();i++) {
            char ch=s.charAt(i);
            if(Character.isLetterOrDigit(ch)) {
                buffer.append(ch);
            }
        }
        StringBuffer reverseBuffer=new StringBuffer(buffer);
        buffer.reverse();
        //reverseBuffer=buffer.reverse();
        //这个reverse会导致buffer变成 反转后的结果  如果new StringBuffer()建立reverseBuffer,再buffer给它赋值,两者会指向相同的内存,比较时始终正确。
        return buffer.toString().equals(reverseBuffer.toString());    
    }

 

题解2:自己写的方法其实就是2的优化!只不过自己不会用string内置函数,所以看起来复杂一些。

 

 

//题解二:左右指针的移动 
    public static boolean isPalindrome(String s) {
        s=s.toLowerCase();
        StringBuffer buffer=new StringBuffer();
        for(int i=0;i<s.length();i++) {
            char ch=s.charAt(i);
            if(Character.isLetterOrDigit(ch)) {
                buffer.append(ch);
            }
        }
        for(int i=0,j=buffer.length()-1;i<j;i++,j--) {
            if(buffer.charAt(i)!=buffer.charAt(j)) {
                return false;
            }
        }
        return true;
    }

 

posted @ 2022-05-24 10:42  Ssshiny  阅读(26)  评论(0)    收藏  举报