2017-05-12 156 views
2

我想從字符串中找到第一個重複的字符。我通常在php中使用array_intersect。 Java中有類似的東西嗎? 例如:在java中是否有array_intersect()等價物?

String a=zxcvbnmz 
Desired output : z 
+0

你實際需要什麼來獲得這些值?也許我們可以回答這個問題。 –

+0

一直試圖學習Java,並有這個問題顯示字符串中的第一個重複的字符。這在php中相當簡單。有沒有可用於簡化解決方案的內置功能? –

回答

5

array_intersect - 計算數組的交集(source


因此,在這種情況下可以使用Set::retainAll

Integer[] a = {1,2,3,4,5}; 
Integer[] b = {2,4,5,6,7,8,9}; 
Set<Integer> s1 = new HashSet<>(Arrays.asList(a)); 
Set<Integer> s2 = new HashSet<>(Arrays.asList(b)); 
s1.retainAll(s2); 

Integer[] result = s1.toArray(new Integer[s1.size()]); 
System.out.println(Arrays.toString(result)); 

輸出

[2, 4, 5] 

你可以閱讀這個在這裏Java, find intersection of two arrays

+0

太棒了!這個也可以。 –

+0

歡迎您@RedBottle –

+1

Ive upvoted先生。這完全合法。 Idk爲什麼它downvoted –

2

有此行爲的默認實現;但是,您可以編寫自己的解決方案!既然你想找到第一個重複的字符,你可以製作一個HashSetCharacter s。在遍歷數組時,將每個字符添加到HashSet,直到遇到HashSet中已有的字符 - 這必須是第一個重複的字符。下面的實施例的代碼:

public char arrayIntersect(String string) { 
    HashSet<Character> hashSet = new HashSet<>(); 

    for (int i = 0; i < string.length(); i++) { 
     char c = string.charAt(i); 
     if (hashSet.contains(c)) 
      return c; 
     else 
      hashSet.add(c); 
    } 
    return null; 
} 

此運行在O(n)的時間,如HashSet查找在O(1)時間運行。

+1

thnks很多。 upvoted。 –

相關問題