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