2013-10-19 25 views
-2

我想知道如何計算特定字符串的出現在字符串中不使用任何內置的JAVA字符串函數的。例如:紀錄在一個字符串的子串,而無需使用字符串函數

InputString = "knowbutuknow" 
subString = "know" 

程序應返回的結果爲2

編輯:重新表述我的問題。這是我遇到的那些面試問題之一。

編輯:基本一樣的charAt和長度字符串函數都可以在這裏使用。

+0

當然這是可能的。您如何看待內置方法的實施? :) –

+0

雅......我應該重新解釋我的問題......這可能是什麼邏輯?任何指針? – RTG87

+2

問題是:爲什麼你想避免字符串函數?如果你告訴我們你想達到的目標,我們可以幫助你更好。 – user1567896

回答

0

假設,你已經知道你要搜索的關鍵字:在輸入字符串的字符「0」

  • 開始
  • 迭代,直到「長 - keyWordLength」(長度爲4的關鍵字無法比擬成最後3個字符)
  • Inside:從0到keyWord.length -1的迭代,並且總是比較:
  • Char在外部循環的位置輸入字符串的內部循環的PLUS位置與在「內部循環」位置的char的關鍵字。
  • ,如果你找到一個匹配,繼續與innerloop,如果不匹配,推進外環,通過簡單的「破」的內循環。
  • 如果你有一個匹配,並且完全處理的內循環,你有一個匹配的關鍵字。

這樣的事情。我假設String.length被允許。其他,你需要創建自己的strlen函數。 (這可以通過使用forach環路和簡單的計數「up」來實現)

這是未經測試的,可能無法正常工作,但應該給出一個簡要的想法。

String inputString = "knowbutuknow"; 
String subString = "know"; 

int matches = 0; 
for (int outer = 0; outer <= inputString.length() - subString.length(); outer++){ 
    for (int inner = 0; inner < subString.length(); inner++){ 
    if (inputString.charAt(outer + inner) == subString.charAt(inner)){ 
     // letter matched, proceed. 
     if (inner == subString.length()-1){ 
     //last letter matched, so a word match at position "outer" 
     matches++; 
     //proceed with outer. Room for improvement: Skip next n chars beeing 
     // part of the match already. 
     break; 
     } 
    }else{ 
     //no match for "outer" position, proceed to next char. 
     break; 
    } 
    } 
} 

編輯:對不起,在一些PHP :)混合修復它。

+1

這實際上是我正在尋找的。謝謝你回答這個問題。我的問題應該更清楚了。下一次我會更加小心。 – RTG87

+0

@ RTG87也許你應該在開始之前添加一個檢查,if(subString.length()<= inputString.length())'以避免不需要的結果。 – dognose

+0

是的。我正在照顧所有的邊緣情況。謝謝! – RTG87

相關問題