題目要求:
寫乙個返回兩個任意字串中最大公共串的函式,即abcdef 和 qcfbcc 返回值為bc語言不限
我的思路:
1.確定乙個串為長串,另乙個串為短串,在長串中找短串(長串中最長的公串可能性就是短串本身)
2.順序確定短串中的每個字元是否在長串中出現(先做乙個預定位)
3.如滿足條件2,即短串中某個字元在長串中出現,在長串中試圖找從這個字元起到短串末尾止的整個串
4.如果不滿足條件3,短串末尾遞減1個字元,直到找到此次字元出現的最大長度(至少是乙個字元)
5.把此次找到的字元長度,與臨時變數比較,如果此次長度大於歷史長度,重賦值返回值
6.重複2-5,直到短串末尾
我的實現:
c#版public static string getpubmaxstring(string value1,string value2)
for (int i=0;i}}
}return result;
}當時在半年不用筆,旁邊很吵(好像另乙個面試在問struts的問題)的情況下,十幾分鐘才想完寫完,回家上機試驗居然倒是一點錯漏也沒有,看來還沒有老的不中用啊;當然,我相信還有更好的演算法實現,拿出這個題目來和大家交流交流,希望能看到大家有啟發性的思路和演算法。
在csdn上看到了soholi(天涯孤棹) 網友實現上更簡潔的演算法:
public static string getlargepublicstring(string a,string b)}}
return string.empty;
}真是可以算是不能再優雅簡潔的實現了,唯一的缺點就是,這個演算法的效率比我的那個實現稍微慢了一些,尤其是在兩個文字串都比較長的情況之下,因為兩個實現最核心的區別就在於,我那個getpubmaxstring是先定位確實存在的乙個字元後,才開始找這個一定存在,但長度未知的公共串,而網友soholi(天涯孤棹) 的getlargepublicstring則是在長串遍歷整個短串的組合,這兩者比較起來,也算是乙個時間有優勢,乙個空間有優勢的差別吧,不知大家還有沒有更讓人有啟發的實現
另外,經過了**的面試筆試,ms的面試面試,終於獲得了乙個**發餉,ms扛槍的影子戰士的職位,人家已經在催我開工了,可是我還沒有想好要不要去,真煩啊!
一道面試題
一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...
一道面試題
前些時候在找工作,就在準備結束此次找工作歷程的時候,去了一家公司面試,去了之後技術經理直接帶到一台電腦旁,給了一張紙條,上面是這樣的題目 用c或c 來實現 1 建立一棵樹,該樹的深度是隨機的,每個節點的位元組點數是隨機的。2 給每個節點分配一段隨機大小的記憶體空間,給每個節點賦乙個隨機數。3 遍歷這...
一道面試題
如果n為偶數,則將它除以2,如果n為奇數,則將它加1或者減1。問對於乙個給定的n,怎樣才能用最少的步驟將它變到1。例如 n 61 n 60 n 2 30 n 2 15 n 16 n 2 8 n 2 4 n 2 2 n 2 1 public class myclass public static vo...