1. 前言
最近面試了幾家公司匣沼,體驗了一下電話面試和今年剛火起來的視頻面試,
雖然之前就有一些公司會先通過電話面試的形式先評估下候選人的能力水平捂龄,但好像不多释涛,至少我以前的面試形式100%都是現(xiàn)場面試。
面試過程中倦沧,不可避免的被問到了很多面試題枢贿,本篇博客就總結下面試過程中被問到的關于String的2道面試題,分別是:
- 如何判斷一個字符串中某個字符出現(xiàn)的次數(shù)刀脏?
- 如何反轉一個字符串?
2. 如何判斷一個字符串中某個字符出現(xiàn)的次數(shù)超凳?
在直接問這個問題之前愈污,面試官先問了我下面這個問題:
請說一下String常用的方法有哪些?
該問題其實是考察Java基礎轮傍,畢竟String類在平時的開發(fā)中使用非常廣泛暂雹,我當時主要說了以下方法:
- length
- equals
- trim
- substring
- concat
- indexOf
- lastIndexOf
- replace
- split
- toLowerCase
- toUpperCase
以上只是面試時我想到的一少部分方法,更多String的方法大家可在IDEA中查看源碼创夜,畢竟太多了杭跪,如下所示:
在回答完上述問題后,面試官緊接著問了該問題:
如何判斷一個字符串中某個字符出現(xiàn)的次數(shù)驰吓?
聽到該問題涧尿,我腦海中第一反應是先把字符串轉換為字符數(shù)組,然后使用foreach循環(huán)檬贰,在循環(huán)體內進行字符比對姑廉,代碼如下所示:
輸出結果如下所示:
字符B出現(xiàn)的次數(shù)為:2
但面試題肯定不會這么簡單,緊接著面試官增加了限制條件:
如果不能使用循環(huán)翁涤,只使用String自己的方法桥言,如何實現(xiàn)呢?
實現(xiàn)方法有很多種葵礼,但我推薦使用replace()方法号阿,很好理解蜒程,并且高效媚污,代碼如下所示:
而且我覺得,關于面試題:如何判斷一個字符串中某個字符出現(xiàn)的次數(shù)旅急?赁严,上面這個實現(xiàn)方法才是面試官真正想聽到的答案扰柠。
3. 如何反轉一個字符串粉铐?
因為是電話面試,在面了1個小時卤档,面試快結束的時候蝙泼,面試官問了該問題:
怎么讓一個字符串反轉?說下思路即可
可能很多同學第一時間想到的思路是下面這樣的:
但我覺得這肯定不是面試官問這個問題的意圖劝枣,所以我當時的回答是下面這樣的:
可以利用數(shù)據(jù)結構中的棧汤踏,因為棧的特點是先入后出(這里可以提一下和隊列的不同,隊列的特點是先入先出)舔腾,先把字符串中的每個字符按順序入棧溪胶,再依次出棧,即可實現(xiàn)字符串的反轉稳诚。
即入棧順序是:A B C 1 2 3 A B C
而出棧順序是:C B A 3 2 1 C B A
轉換成Java代碼是下面這樣的:
輸出結果如下所示:
反轉前:ABC123ABC
反轉后:CBA321CBA