我是靠谱客的博主 典雅帅哥,最近开发中收集的这篇文章主要介绍有效回文串,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有效回文串

有效回文串应该算是一到高频算法题,直接看题目。

给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。

Example
“A man, a plan, a canal: Panama” 是一个回文。
“race a car” 不是一个回文。

也就是回文串的定义是在忽略大小写,各种标点符号的情况下,如果一个字符串正着看和反着看是一样的,那么该字符串就是有效回文串。所以思路应该是先把字符串中的各种符号去掉,只留下数字和字母,并且全部转化为小写,然后将字符串倒置,一一比较各个位置是否相等。那么如何去掉原来字符串中的各种符号呢,这里我借助字符0在ASC||表中为48, a在字符表中为97来判断的。具体代码如下:

public static boolean isPalindrome(String s){   

    String newString1 = s.trim().toLowerCase();
    StringBuffer s1 = new StringBuffer();

    for(int i = 0;i < newString1.length();i++){
        if((newString1.charAt(i) >= 48 && newString1.charAt(i) <= 57) ||(newString1.charAt(i) >= 97 && newString1.charAt(i) <= 122)){
            s1.append(newString1.charAt(i));
        }
    }

    StringBuffer s2 = new StringBuffer(s1);  
    s2.reverse();

    int count = 0;  
    for (int i = 0; i < s1.length(); i++) {  
        if (s1.charAt(i) == s2.charAt(i)) {  
            count++;  
        }  
    }

    if (count == s1.length()){                
        return true;
    }else{  
       return false;  
    }  
    }

要注意的就是if条件里的判断,数字是从48到57,字母是从97到122。
顺便贴上统计一个字符串中各个字母出现多少次的代码

int[] arr = new int[26];
    String str = s.trim().toLowerCase();

    for(int i = 0;i < str.length();i++){
        char c = str.charAt(i);
        int index = c - 'a';
        if(index >= 0 && index <=25){
            arr[index] = arr[index] + 1;
        }           
    }

    for (int i = 0; i < arr.length; i++){  
        if(arr[i]!=0){  
            System.out.println("字母"+(char)(i+'a')+"出现:"+arr[i]+"次");  
        }  
    }  

最后

以上就是典雅帅哥为你收集整理的有效回文串的全部内容,希望文章能够帮你解决有效回文串所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部