[英]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.String
的static 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.