有點意思的 Java 遞歸調用

最近在刷一些問題的時候看到有下面一個問題

 

2023-08-31_00-04-56

 

上面問的是當輸入的字符串爲什麼的時候返回 True

總結

在做題目的時候,第一次還做錯了。

這是因爲解答這個題目的時間只有 3 分鐘,沒有自己看題目

後來拿着程序跑了下。

    public void testGetPut() throws Exception {

        String text = "abcdef";
        System.out.println(text.equals(alertText(text)));
    }

    private String alertText(String inputText) {
        if (StringUtils.isBlank(inputText))
            return inputText;

        return inputText.charAt(inputText.length() - 1) + alertText(inputText.substring(0, inputText.length() - 1));
    }

上面代碼的運行結果如下:

 

2023-08-31_14-59-30

 

如果仔細看這個問題就可以發現在子函數裏面有一個遞歸調用。

這個可能是會比較困惑的地方。

這行代碼 inputText.charAt(inputText.length() - 1) 將會返回你輸入字符串的最後一個字符。

然後在使用 + 這個是 String 的字符串連接計算。

隨後再遞歸調用了這個方法,可以看到遞歸調用輸入的字符串爲爲上次使用的字符串,去掉最後一個字符的字符串。

然後在遞歸調用方法中又取得了最後一個字符。

通過上面的算法,我們會知道需要滿足返回爲 TRUE 的情況。

只有一種可能就是字符串應該需要對稱排列。

所以答案應該是 :ab1221ba

只要滿足對稱排列就可以了,所以如果你輸入:abc123321cba 這個也會返回 TRUE。

我說的對稱是輸入字符串從中間拆開,左右對稱。

很遺憾的是,在這個題目的選擇時候,我選錯了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章