面试系列第2篇:回文字符串判断的3种方法!
作者 |?磊哥
來源 | Java面試真題解析(ID:aimianshi666)
轉載請聯系授權(微信ID:GG_Stone)
回文字符串判斷是面試和筆試中常見的面試題之一,同時也是 LeetCode 中一道經典的面試題,那么本文我們就來看一下什么是回文字符串?以及如何實現回文字符串的判斷。
回文字符串定義
回文字符串是一個正讀和反讀都一樣的字符串,比如“level”或者“noon”等等就是回文字符串。(來自百度百科)
舉個例子,比如以下字符串就為回文字符串:
回文字符串判斷的3種方法
1、使用內置函數反轉判斷
回文字符串最簡單的實現方式就是將字符串進行反轉之后再與原字符串進行判斷,假如二者相同的話則證明為回文字符串,我們可以借助 StringBuilder?來實現,實現代碼如下:
public?class?Plalindrome?{public?static?void?main(String[]?args)?{System.out.println(isPlalindrome_1("12321"));System.out.println(isPlalindrome_1("1231"));System.out.println(isPlalindrome_1("123321"));}/***?借助內置函數反轉實現回文字符串判斷*?@param?str?待判斷字符串*?@return*/private?static?boolean?isPlalindrome_1(String?str)?{StringBuilder?sb?=?new?StringBuilder(str);sb.reverse();return?sb.toString().equals(str);} }程序的執行結果為:
true
false
true
當然,除了可以使用 StringBuilder 之外,我們也可以使用 StringBuffer?來實現,實現代碼都是相同的,我們這里就不再贅述。
2、使用方法循環調用實現
我們可以初始化兩個指針 low 和 high,讓它們分別指向字符串的第一個字符和最后一個字符,每次判斷兩個指針指向的字符是否相同,如果相同,則更新指針,是 low = low+1 和 high = high-1,然后判斷再進行判斷,當所有循環到最中間時二者還相同,則證明是回文字符串,如下圖所示:實現代碼如下:
public?class?Plalindrome?{public?static?void?main(String[]?args)?{String?str?=?"12321";String?str2?=?"1231";String?str3?=?"123321";System.out.println(isPlalindrome_2(str,?0,?str.length()?-?1));System.out.println(isPlalindrome_2(str2,?0,?str2.length()?-?1));System.out.println(isPlalindrome_2(str3,?0,?str3.length()?-?1));}/***?用方法循環調用實現*?@param?str??待對比字符串*?@param?low??前面字符的下標*?@param?high?后面字符的下標*?@return*/private?static?boolean?isPlalindrome_2(String?str,?int?low,?int?high)?{if?(high?==?0?||?high?==?1)?{return?true;}?else?{char?c1?=?str.charAt(low),?c2?=?str.charAt(high);if?(c1?==?c2)?{?//?字符對比相等return?isPlalindrome_2(str,?low?+?1,?high?-?1);}?else?{?//?字符對比不相等return?false;}}} }程序的執行結果為:
true
false
true
3、使用 for 循環判斷
使用 for 循環判斷的方式和上一種實現思路類似,是將字符串分隔成兩半,先對比第一位和最后一位是否相等,如果相等進行下一次循環,每次給首位+1 和末尾-1,然后再進行判斷,在整個循環過程中如果有一次不相等就里面返回 false,如果整個循環能順利執行完則說明是回文字符串,直接返回 true 即可,實現代碼如下:
public?class?Plalindrome?{public?static?void?main(String[]?args)?{String?str?=?"12321";String?str2?=?"1231";String?str3?=?"123321";System.out.println(isPlalindrome_3(str));System.out.println(isPlalindrome_3(str2));System.out.println(isPlalindrome_3(str3));}/***?用?for?循環判斷*?@param?str?待對比字符串*?@return*/private?static?boolean?isPlalindrome_3(String?str)?{char[]?chars?=?str.toCharArray();int?maxSize?=?chars.length?/?2;?//?循環比較次數for?(int?i?=?0;?i?<?maxSize;?i++)?{if?(chars[i]?!=?chars[chars.length?-?1?-?i])?{//?最前面的和最后的依次對比,如果有一個不相同,則返回?falsereturn?false;}}return?true;} }程序的執行結果為:
true
false
true
當然,除了以上 3 種實現方法之外,我們還可以有更多判斷的方法,比如將字符串倒序之后組成一個新的字符串,再將新老字符串進行比較,或者直接使用 StringBuffer?的 reverse 來實現等。
回文字符串判斷的意義
回文字符串判斷的意義,我能想到的就是“面試”了,因為在實際的生活中真的很難找到它的實際應用,這就好像游戲和玩具對人的“意義”一樣,它有什么意義呢?其實“面試”一條也就夠了吧。
總結
回文字符串可以使用內置反轉字符串或者遞歸的方式進行對比,但如果是實際的面試中,我推薦使用第 3 種方式來實現,因為它更原始、需要的依賴也更少,我們并不需要借助 JDK 自身的 API 就可以實現,并且它的實現代碼也很簡單易懂。
你還有更好的解決方案嗎?歡迎評論區補充留言~
往期推薦List 集合去重的 3 種方法
2020-08-17
定時任務最簡單的3種實現方法(超好用)
2020-08-18
為什么勸你放棄Maven?看看Gradle的這些優點就知道了
2020-08-19
關注下方二維碼,每一天都有干貨!
總結
以上是生活随笔為你收集整理的面试系列第2篇:回文字符串判断的3种方法!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实战:Redis 性能优化方案
- 下一篇: 开篇词:如何轻松获得 Offer