簡體   English   中英

Java | 比較char數組中的char字

[英]Java | compare char word in a char array

如何獲取可在段落中找到的單個單詞的索引(表示在char數組中)(再次表示在char數組中)。

char代表這個詞

char word[] = new char[]{'w','o','r','d'};

這是段落

char para[] = new char[]{'f','g','q','z','y','i','o','p','w','o','r','d'};

我希望在這種情況下得到第一個字母的索引8。 我在排序單詞scrambled時使用了二進制搜索。

謝謝。

理論上有點低效,但實用而簡單:

int position = new String(paragraph).indexOf(new String(word));

如果你想了解它是如何工作的 - 檢查java.lang.Stringstatic int indexOf(..)方法

在這種情況下,二進制搜索不會幫助您。 你必須線性搜索。 最簡單的解決方案是線性搜索第一個字符,找到后檢查剩下的字是否跟隨。

更精細的解決方案是使用KMP算法

最簡單的方法就是嘗試所有可能性,循環遍歷每個起始點並測試所有字符是否匹配。 事實上你已經提到了二元搜索,這可能很簡單,你已經知道了,但請告訴我你是否正在尋找它。

如果您正在尋找最佳方法,請參閱http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

您可以將字符數組轉換為字符串。 在字符串中搜索的結果與搜索數組時的結果相同。

String needle = new String(word);
String haystack = new String(para);
int i = haystack.indexOf(needle);

結果:

8

這可能比天真的O(n * m)搜索快得多,因為字符串函數indexOf已經過優化。

如果要在不創建臨時字符串的情況下執行此操作,則可以為字節數組實現字符串搜索算法 例如,您可以選擇具有最差情況O(n)的Boyer-Moore算法。

快速回答,我想其他人會更精細。 最初,我會做這樣的事情(偽代碼更適合思考算法):

boolean nonmatchingchar
integer i, j
for each i of word until endof word
    for each j of para until endof para
      if word i isnotequalto para i set nonmatchingchar true     
    end for
end for


if nonmatchingchar is true print "character sequence not found"

編輯:為了在你有幾個要搜索的單詞的情況下提高效率,你可以構成一個二維數組,其中的單詞按照第一個字母排序。 從那以后,你可以逐字逐句地查看第二個數組,並根據該字母測試一個單詞的子集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM