字符串是我們每個程序員每天都要接觸的數(shù)據類型,因此在面試的時候也有許多關于字符串的面試題,本文主要介紹面試常見的幾種題型。
松原ssl適用于網站、小程序/APP、API接口等需要進行數(shù)據傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!題型一?
?????本題主要判斷兩棵樹的拓撲結構是否相同,因此我們可以將此題轉化成字符串的寫法:將樹序列化,然后用KMP算法判斷t1樹的序列化串是否含有t2樹的序列化串即可,如果含有則說明t2是t1的子樹,則滿足拓撲結構。
題型二
本題大部分讀者都很容易想到用兩個哈希表來存儲str1和str2的對應字符的出現(xiàn)次數(shù),然后比較二者的哈希表,如果里面數(shù)據相同,則兩個字符串互為變形詞。
題型三
由分析可知,一個長度為n的字符串旋轉詞的所有可能性為下標0~下標n-1之前的字符串移到最后方,因此我們可以直接拼接一個字符串S=str1+str1,可見,上述所有可能性都會包含在S里面作為S的子串,因此只需要判斷str2是否為S的子串即可。如果str2為S的子串,那么str1和str2互為旋轉詞。
題型四
本題我們可以利用字符串的反轉+局部反轉來解決問題。對于這樣一個單詞間逆序的問題,我們可以先將字符串整體反轉,例如:“pig loves dog”--->“god sevol gip” 然后發(fā)現(xiàn),離我們的目標“dog loves pig” 僅僅是每個單詞之間的順序還是逆序,所以我們再進行一個局部反轉,對每個單詞進行反轉即可將“god sevol gip”--->“dog loves pig”。
題型五
本題我們還是可以利用字符串的反轉+局部反轉來解決問題。例如:“ABCDE”,i=2,將str調整為:“DEABC”,我們可以先將“ABCDE”? (0,i]的位置和? (i,n)的位置分別局部反轉,變?yōu)椋骸癈BAED”然后發(fā)現(xiàn)離我們的目標僅僅差一個整體反轉,然后再進行一個整體反轉即可。
(可見,許多關于字符串移動或者逆序的問題我們均可利用字符串的反轉和局部反轉來靈活解決問題,這里需要讀者自行體會)
題型六
本題我們大部分讀者會直接比較每個字符串的ASCII碼值來進行排序,比如["ab","cd","ac"]排序后變?yōu)閇"ab","ac","cd"],雖然這種解法對于大部分情況都滿足,但是還是對于一些情況是不滿足的,例如題目中的["b","ba"]排完序后變?yōu)閇"b","ba"],但是我們可以知道,bab明顯比bba小,因此此時不成立。本題正確的解法是將str1+str2與str2+str1作比較,如果str1+str2>str2+str1,則str2排在str1前面,反之排在后面,這樣排完序再拼接起來的字符串才是所有可能性中字典順序最小的。
題型七
本題大部分語言均可直接調用字符串的庫(例如JAVA中調用replace,將空格直接都替換成%20)來完成。那么如果在純代碼情況下,我們可以構造一個新的字符數(shù)組S(長度n=str+空格數(shù)量*2),然后從左往右遍歷字符串str,如果遇到非空格字符則直接填入S,遇到空格則填入%20。
題型八
本題我們可以定義一個變量n來幫我們記錄此時左括號與右括號的差值,從左往右遍歷字符串,遇到左括號n++,遇到右括號n--,如果過程中發(fā)現(xiàn)n<0則不是有效的字符串,如果最后n!=0,也不是有效的字符串,當且僅當過程中n>=0并且最后n=0才是一個有效的字符串。
題型九
本題是經典的求最長無重復字符子串的長度,我們可以利用哈希表來解決。定義一個當前子串長度變量now,從左往右遍歷字符串,并且將遍歷到的字符加入哈希表,如果發(fā)現(xiàn)哈希表中不包含本字符則當前子串長度now++,如果包含則需要回滾到上一個出現(xiàn)本字符的位置,然后now的長度變?yōu)楫斍拔恢脺p去上一個出現(xiàn)本字符的位置(這邊讀者需要自己思考一下為什么),但是,如果上一個出現(xiàn)字符的位置在我們子串起始位置之前,我們不需要回滾。
具體代碼如下:
public class LengthOfLongestSubstring {
public int lengthOfLongestSubstring(String s) {
if(s.isEmpty())return 0;
int i=-1;
int max=1;
int now=1;
Mapmap=new HashMap<>();
//遍歷數(shù)組
for (int k = 0; k< s.length(); k++) {
if(map.getOrDefault(s.charAt(k),-1)!=-1){ //判斷哈希表中是否有本元素
//有的話就將i值挪到上一個重復的地方 但是要注意,不可回退 因此要判斷大小
i=map.getOrDefault(s.charAt(k),-1)>i?map.getOrDefault(s.charAt(k),-1):i;
}
now=k-i;//用當前值減去上一個重復的
map.put(s.charAt(k),k);
max= Math.max(now, max); //取二者大值
}
return max;
}
}
以上是常見的JAVA筆試面試題(圖片來源于??途W)。字符串在筆試面試中是必考的題目,希望讀者們能深入理解每種解題的思想。一起加油進步!
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
當前標題:字符串常見的筆試面試題(無代碼)-創(chuàng)新互聯(lián)
網頁地址:http://m.rwnh.cn/article2/ddoeoc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供定制網站、網頁設計公司、動態(tài)網站、微信小程序、關鍵詞優(yōu)化、電子商務
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容