2015-03-13 57 views
2

我有這個代碼,但它似乎很笨拙。在Java中有更規範的方法嗎?檢測兩個字符串是否相差一個字符的最佳方法是什麼?

public boolean oneDiff(String from, String s) { 
    if (from.length()!=s.length()) return false; 
    int differences = 0; 
    for (int charIndex = 0;charIndex<from.length();charIndex++) { 
     if (from.charAt(charIndex)!=s.charAt(charIndex)) differences++; 
    } 
    return (differences==1); 
} 
+4

您至少可以優化您的解決方案,以便在for循環內差異> 1時返回false – 2015-03-13 18:30:25

+0

您是否需要考慮一個字符串是預先添加還是附加到另一個字符串的單個字符的情況? – user3745362 2015-03-13 18:32:50

+0

firstString.compare(secondString);會給你一個詞彙比較,儘管我不確定這正是你想要的。 – 2015-03-13 18:50:30

回答

2

我同意@mk。但是爲了儘量減少循環執行,你不應該運行循環直到字符串結束。相反,你可以儘快打破環路的差異變得大於1,像這樣:

for (int charIndex = 0;charIndex<from.length();charIndex++) { 
     if (from.charAt(charIndex)!=s.charAt(charIndex)) differences++; 
     if(differences > 1) break; 
    } 
    return (differences==1); 

這將加快執行速度有助於循環優化,如果這是你想要的。

1

不,這真的是最好的辦法!

沒有什麼內置的,因爲這不是你需要經常做的事情。最近的訣竅是做兩個整數的異或,然後讓使用bitCount漢明權重,以檢查多少翻轉位,他們的共同點:

但還有一點也不像絃樂 - 這是不是一個常見的情況,所以你必須編碼你自己的。你編碼的方式看起來很好 - 你真的必須循環遍歷每個角色。我想你可以縮短變量名稱並在返回時刪除這些變形,但這只是表面化妝。

相關問題