Raptor-回文字符串判断
1. 題目描述
輸入一個字符串,判斷其是否是回文?;匚氖钦蚱磳懪c反向拼寫都一樣的字符串。例如:"abcba"和"abccba"都是回文。
2. 算法分析
我們在Raptor中輸入字符串,記為 s,在Raptor中,字符串 s 是以字符數組的形式存在,我們可以利用數組對回文字符串進行判斷。
比如字符數組 s = "abcdeedcba",這個數組的長度也即末端索引位置可以用自帶函數 length_of 來獲取。我們定義兩個循環變量 i 和 j,其中 i 記錄起始索引的位置,初始值 i=1;j 記錄末端索引的位置,初始值 j=length_of(s)。利用循環,從兩頭向中間逼近,依次判斷 s[i] 和 s[j] 是否相等。如果一直到 i>=j 時, s[i] 和 s[j] 仍然相等,說明這個字符串就是回文字符串;如果中間某一步 s[i]=s[j] 不成立,那么退出循環,最后 i 必然小于 j。
這樣,循環結束的條件可以設為滿足?i>=j or s[i] != s[j],其中 i>=j 是回文結束的條件,s[i]!=s[j]是非回文結束的條件。(這里的 != 表示不等于)
舉兩個例子:
2.1 回文字符串例子s = "abcdeedcba"
初始值 i=1, j=length_of(s)=10
- s[i]= 'a', s[j]='a', 不滿足 i>=j or s[i] != s[j],此時執行 i=i+1, j=j-1 (這時 i=2, j=9);
- s[i]= 'b', s[j]='b', 不滿足 i>=j or s[i] != s[j],此時執行 i=i+1, j=j-1 (這時 i=3, j=8);
- s[i]= 'c', s[j]='c', 不滿足 i>=j or s[i] != s[j],此時執行 i=i+1, j=j-1 (這時 i=4, j=7);
- s[i]= 'd', s[j]='d', 不滿足 i>=j or s[i] != s[j],此時執行 i=i+1, j=j-1 (這時 i=5, j=6);
- s[i]= 'e', s[j]='e', 不滿足 i>=j or s[i] != s[j],此時執行 i=i+1, j=j-1 (這時 i=6, j=5);
- s[i]='e', s[j]='e',滿足 i>=j or s[i] != s[j],循環結束。
此時 i>=j,字符串 s 是回文字符串。
2.2 非回文字符串例子 s="abceba"
初始值 i=1, j=length_of(s)=6
- s[i]= 'a', s[j]='a', 不滿足 i>=j or s[i] != s[j],此時執行 i=i+1, j=j-1 (這時 i=2, j=5);
- s[i]= 'b', s[j]='b', 不滿足 i>=j or s[i] != s[j],此時執行 i=i+1, j=j-1 (這時 i=3, j=4);
- s[i]= 'c', s[j]='e', 滿足 i>=j or s[i] != s[j],循環結束。
流程結束,此時不滿足 i>=j,字符串 s 不是回文字符串。
3. 流程圖
?
4.測試結果
4.1 回文字符串例子s = "abcdeedcba"
?
4.2 非回文字符串例子 s="abceba"
5. 特殊說明 (回文數字判斷)
本題中的程序僅用于判斷字符串是否回文,無法判斷數字是否回文,為什么呢?因為Raptor對于輸入框中的內容,如果僅為數字,不包含除了數字之外的其它字符,則當做數字處理。這時,如果我們直接用本程序,就會出現如下錯誤 "s is not a 1D array",這時s僅為一個數字,不是一維數組,無法進行數組索引操作。
如果輸出框中包含除數字之外的其它字符,那么這個輸入就會被當做一個字符串,這樣,我們可以借助特殊字符包裹數字,進行回文數的判斷。例如我們在數字兩邊加上 "#",輸入變成 #123321#,就可以利用回文字符串的程序來判斷數字是否為回文數了,如下:
?當然,這里的特殊符號可以任意取,只要包裹在輸入數字兩邊的一樣就可以了。回文數判斷相當于拓展自回文字符串判斷,需要在輸入數字的兩邊加上特殊符號,以形成字符串。下一篇博客我們將聚焦回文數判斷,發展針對數字的回文數判斷程序。
?
?
總結
以上是生活随笔為你收集整理的Raptor-回文字符串判断的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 史上最全最详细的ThreadLocal
- 下一篇: jsoup 的基本使用以及API内容