最近在刷一些問題的時候看到有下面一個問題
上面問的是當輸入的字符串爲什麼的時候返回 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));
}
上面代碼的運行結果如下:
如果仔細看這個問題就可以發現在子函數裏面有一個遞歸調用。
這個可能是會比較困惑的地方。
這行代碼 inputText.charAt(inputText.length() - 1)
將會返回你輸入字符串的最後一個字符。
然後在使用 +
這個是 String 的字符串連接計算。
隨後再遞歸調用了這個方法,可以看到遞歸調用輸入的字符串爲爲上次使用的字符串,去掉最後一個字符的字符串。
然後在遞歸調用方法中又取得了最後一個字符。
通過上面的算法,我們會知道需要滿足返回爲 TRUE 的情況。
只有一種可能就是字符串應該需要對稱排列。
所以答案應該是 :ab1221ba
只要滿足對稱排列就可以了,所以如果你輸入:abc123321cba 這個也會返回 TRUE。
我說的對稱是輸入字符串從中間拆開,左右對稱。
很遺憾的是,在這個題目的選擇時候,我選錯了。