判断回文字符串(给定开始位置和字符个数)

介绍:

    一个字符串从前往后读和从后往前读得到的是同样的字符串,这就是回文字符串。求一个字符串,从k开始,长度为L的字符串是否为回文字符串

分析:

    1.直接截取从k开始长度为L的字符串
    2.对这个字符串进行遍历,判断首尾是否相同,如果相同则继续遍历,有一个不同就返回false。

实现:

public class 回文字符串 {

    public static void main(String[] args) {
        System.out.print("该子段是否为回文字符串?答案:"+judgeHuiWen1("abbba",0,5));
    }
    //方法1
    private static boolean judgeHuiWen1(String str, int start, int length) {
        char arr[] = str.toCharArray();
        int end = start + length -1;
        if(start>str.length()||(start+length)>str.length()){//这里是对不合法输入的处理
            System.out.println("输入的参数有问题");
            return false;
        }
        //遍历整个字符串
        for(int i=0;i<length;i++){
            //当开始位置大于等于结束位置时,就说明已经遍历完毕,因为一个从头往后走,一个从后往前走。到中间就没必要再继续循环了。节约资源。
            if(start>=end){
                break;
            }
            //当arr[start]等于arr[end]的时候,就需要start++,end--,然后继续循环
            if(arr[start] == arr[end]){
                start++;
                end--;
                continue;
            }else if(arr[start]!=arr[end]){
                return false;
            }
        }
        return true;
    }
    //方法2,和方法1差不多,只是方法1用的数组下标来获取字符,方法2用的字符串的charAt方法获取字符,原理相同。
    private static boolean judgeHuiWen2(String str,int start,int length){

        String newstr = str.substring(start,start+length);
        int len = newstr.length();
        for(int i=0;i<len;i++){
            char a = newstr.charAt(i);
            char b = newstr.charAt(len-1);
            if(i>=len){
                break;
            }
            if(a == b){
                len--;
                continue;
            }else if(a != b){
                return false;
            }

        }
        return true;
    }

总结:

  我记得之前做过一道蓝桥杯的练习题,说是:求四到五位的回文数,并且各个位数的和为1-54之间的值。
  我当时特别笨,因为不知道charAt这个方法,所以我疯狂的用for循环来嵌套,到最后我套了6层for循环,而且还没做出来。后来请教别人,知道了charAt()这个方法,只需要几行代码就可以实现。
  所以还是得多看看api,没准里面的哪个方法可以直接解决我们的问题。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章