判斷迴文字符串(給定開始位置和字符個數)

介紹:

    一個字符串從前往後讀和從後往前讀得到的是同樣的字符串,這就是迴文字符串。求一個字符串,從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,沒準裏面的哪個方法可以直接解決我們的問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章