[英]How to optimize two for loops (a for loop inside a for loop) in java
我有以下問題:
String str = "abcdefghiart----"
這種方法效果很好,但是如果字符串很大並且只有最后兩個字符重復,那么迭代復雜度會很高
現在,我想最小化復雜性並優化此代碼。 我也可以使用foreach
循環進行迭代,但仍然是兩個foreach
循環。 我不想使用任何系統庫。 有人可以幫我嗎?
BitSet seenCharacters = new BitSet();
for(int i=0;i<str.length(); i++) {
if(seenCharacters.get(str.charAt(i))) {
return str.charAt(i); // duplicate
}
seenCharacters.set(i);
}
...直截了當,不是嗎?
我會用其他解決方案來解決這個問題。 我將使用哈希圖(或其中的任何派生圖),鍵將是字符,並且值將為null。
然后,我將遍歷字符串,一次得到一個字符,對於得到的每個字符,我將嘗試在哈希圖中插入一個條目。 如果我無法插入它,那么我知道該字符(密鑰本身)是重復的。
這是一種查找字符串中第一個重復字符的方法。
public static String findFirstDuplicate(String string){
for(int i=0;i<string.length()-1; i++){
String c=string.charAt(i)+"";
if(string.indexOf(c, i+1)>-1)
return c;
}
return null;
}
作為優化的AS,您可以通過自定義“合並排序”來優化它以查找重復值,並在找到重復值時終止。 在這里進行解釋有點復雜,但是在最壞的情況下,您可以使用修改的合並排序算法在O(nlogn)中找到第一個重復項。
定義一個大小為[26]的int數組,每個字母一個插槽
遍歷字符串,對於每個字母,檢查插槽的值是否大於0(如果是),則對應於插槽的字母是重復字符,如果為0,則將其遞增並繼續前進
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.