大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java程序員面試字符串算法教程

Java程序員面試字符串算法教程

更新時間:2019-09-09 09:57:37 來源:動力節(jié)點 瀏覽2846次



  一、概要


  本文介紹了有關字符串的算法第一部分的Java代碼實現(xiàn),算法目錄:


  替換字符串中的空格


  輸入一個字符串,打印出該字符串的所有排列


  第一個只出現(xiàn)一次的字符


  翻轉句子


  計算字符串之間的最短距離


  “二、代碼實現(xiàn)


  2.1替換字符串中的空格


  問題描述


  實現(xiàn)一個函數(shù),將字符串p中的所有空格都替換成為指定的字符串r。


  解決思路


  遍歷原始的字符串p,統(tǒng)計原先字符串中空格的個數(shù)spaceNum。


  創(chuàng)建一個新的數(shù)組n,用于存放替換后的字符串。由于原先字符串中空格也占了一個位置,因此新數(shù)組n的長度為p.len+(r.len-1)*spaceNum。


  對于p從后往前遍歷,如果遇到了空格,那么就將需要替換的字符串r中的字符從后往前填入n數(shù)組中;如果遇到了非空格,那么就將p中的字符填入n數(shù)組中。


  實現(xiàn)代碼


image.png

  運行結果

image.png

  2.2輸入一個字符串,打印出該字符串的所有排列


  問題描述


  輸入一個字符串,打印出該字符串中字符的所有排列。例如輸入字符串a(chǎn)bc,則輸出由字符a、b、c所能排列出來的所有字符串a(chǎn)bc、acb、bac、bca、cab和cba。


  解決思路


  這是一個遞歸問題,求一個長度為n的字符串的全排列的方法為:


  n[0..n.len-1]全排列的計算方法為:將n[0]位置的字符分別和n[1..n.len-1]的每一個字符串交換,n[0]和交換后的n[1..n.len-1]的全排列進行組合。我們將字符串{s}的全排列表示為{s},那么對于abc來說,其全排列{abc},就等于是a+{bc}、b+{ac},c+{ba}。


  以此類推,n[1..n.len-1]的全排列,則是將n[1]分別和n[2..n.len-1]的每一個字符串交換,再求出交換后的n[2..len-1]的全排列,遞歸結束的條件為n[i..n.len-1]只有一個字符,例如,bc的全排列為b+{c}、c+{b},而{c}和{b}的全排列只有一種,因此遞歸結束,這時候就可以打印出結果。


  實現(xiàn)代碼

image.png

  運行結果

image.png

  2.3第一個只出現(xiàn)一次的字符


  問題描述


  在字符串中找出第一個只出現(xiàn)一次的字符。如輸入abaccdeff,則輸出b,要求時間復雜度為O(n)。


  解決思路


  這里需要采用以空間換時間的思想,也就是創(chuàng)建一個足夠大的數(shù)組c,這里為256,然后對原始的數(shù)組p進行兩次遍歷:


  第一次從頭開始遍歷p,以p的值作為數(shù)組c的下標,并將c中對應位置的值加1,也就是說c[Integer.valueOf(i)]的值表示的是字符i在p中出現(xiàn)的次數(shù)。這和HashMap的原理有些類似,只不過是將查找的key值直接簡化成為了value的整型值。


  第二次從頭開始遍歷p,查找數(shù)組c對應位置該值是否為1,如果為1,那么就表示它是第一次只出現(xiàn)一次的字符。


  實現(xiàn)代碼

image.png

  運行結果

image.png

  2.4翻轉句子


  問題描述


  翻轉句子中單詞的順序,但單詞內(nèi)字符的順序不變,句子中單詞以空格符隔開。例如Iamaoriginalstring翻轉后的結果為stringoriginalaamI。


  解決思路


  實現(xiàn)過程分為兩步:


  第一步,將整個句子中的所有字符都翻轉


  第二步,遍歷翻轉后的句子,對于句子內(nèi)的每一個單詞,將其字符再翻轉一次,就能保證單詞內(nèi)字符的順序不變。翻轉單詞的時候,通過pStart和pEnd記錄每次遇到單詞的起止下標,并使用子方法reverseSub對單詞中的字符進行翻轉。


  實現(xiàn)代碼

image.png

  運行結果為:

image.png

  2.5計算字符串之間的最短距離


  問題描述


  假設我們有兩個字符串A和B,那么如果想要將字符串A通過以下三種操作變換成B:刪除、新增和修改,操作步驟的次數(shù)就稱為字符串A和B之間的距離。


  現(xiàn)在給定兩個字符串,求這兩個字符串之間的最短距離。


  解決思路


  首先,我們需要先明確一個前提條件:如果A的長度為0,那么A和B之間的距離就為B的長度,反之對于B也如此。


  下面,我們在來看普通的情況,假如A[0]和B[0]相同,那么A和B之間的距離就為A[1..A.len-1]和B[1..B.len-1]之間的距離;假如A[0]和B[0]不相同,那么想要讓A和B相同,執(zhí)行的操作有以下幾種:


  刪除A的第一個字符,然后計算A[1..A.len-1]和B[0..B.len-1]的距離


  刪除B的第一個字符,然后計算A[0..A.len-1]和B[1..B.len-1]的距離


  修改A的第一個字符為B的第一個字符,然后計算A[1..A.len-1]和B[1..B.len-1]的距離


  修改B的第一個字符為A的第一個字符,然后計算A[1..A.len-1]和B[1..B.len-1]的距離


  增加A的第一個字符到B第一個字符之前,然后計算A[1..A.len-1]和B[0…B.len-1]的距離


  增加B的第一個字符到A第一個字符之前,然后計算A[0…A,len-1]和B[1..B.len-1]的距離


  對于以上這六種情況,其實最終都可以歸納為經(jīng)過一次操作,再加上剩下部分的操作次數(shù),那么我們的接下來的工作就是求出剩下部分的操作部分的最小值。對于上面的任意一種情況,經(jīng)過劃分后A和B的長度都會減少,那么最終必然會達到我們在一開始談到的前提條件:如果A的長度為0,那么A和B之間的距離就為B的長度,反之對于B也如此。

  實現(xiàn)代碼

image.png

  運行結果:

image.png

  以上就是動力Java培訓機構小編介紹的“Java程序員面試字符串算法教程”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。


  



提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 免费h片在线观看网址最新 免费v片在线观看无遮挡 | 国产色婷婷精品综合在线手机播放 | 久久只有精品视频 | 九九热视频在线 | 色涩播| 高清免费毛片 | 特黄aaaaaaaaa及毛片 | 国产精品日韩欧美一区二区三区 | 天天看片天天爽 | 日韩a免费 | 日本a在线视频 | 99热在| 免费国产小视频在线观看 | 免费精品国产自产拍观看 | 伊人伊色| 久久成人在线观看 | 青青青国产免费全部免费观看 | 欧美日韩一二三 | 91粉嫩萝控精品福利网站 | 色综合久久综精品 | 欧美kkk4444在线观看 | 最近中文国语字幕在线播放视频 | 黄色录像欧美 | 日日操夜夜 | 国产婷婷一区二区三区 | 中文字幕久热精品视频免费 | 久久久www免费看片 久久久不卡 | 欧美一级片网站 | 久久综合精品国产一区二区三区 | 免费a一级毛片在线播放 | 久久亚洲国产精品五月天 | 免费一级毛片无毒不卡 | 精品国产高清a毛片无毒不卡 | 久久日本精品99久久久久 | 亚洲国产综合专区在线播一一 | 中文精品久久久久国产网站 | 国产三级做爰高清视频a | 国产成人精品在视频 | 日本午夜色 | 奇米影视奇米色777欧美 | 日本不卡免费 |