2016-09-27 2 views
0

String 배열의 모든 반복되지 않는 항목을 찾고 싶습니다.
한다고 가정 나는했습니다 :문자열 배열에서 중복되지 않는 항목을 모두 찾는 방법은 무엇입니까?

String[] str = {"Red", "Red", "Green", "Green", "Blue"}; 

내가 다시 반복되지 않는 "블루"을 찾을 싶습니다.

어떻게하면됩니까?

+0

배열의 복잡성은 얼마나됩니까? 필요한 코드 복잡성은 무엇입니까? – prabodhprakash

+0

지도, 사용자 지정 함수, 반복기와 같은 솔루션이 있지만 궁금해지기를 원하면 정규식으로 이동하십시오. 그것의 좋은 운동과 학습 정규식을 즐길 수 있습니다. – Cyclotron3x3

답변

2

하나의 솔루션은 키로 String을 사용하고 값으로 Integer를 사용하여 Map을 만드는 것입니다. 배열을 반복하고 맵에서 String의 양을 늘려야합니다.

String[] str = {"Red", "Red", "Green", "Green", "Blue"}; 
Map<String,Integer> stringsCount = new HashMap<String,Integer>(); 

for (String s : str){ 
    if (!stringsCount.containsKey(s)) 
     stringsCount.put(s, 1); 
    else 
     stringsCount.put(s, stringsCount.get(s) + 1); 
    } 

그리고 당신은 한 번만 계산 된 모든 문자열 인쇄 할 수 있습니다

for (Map.Entry<String, Integer> entry : stringsCount.entrySet()) 
    if (entry.getValue() == 1) 
     System.out.println(entry.getKey()); 
+0

Tx sir .. 그것은 매우 간단했습니다.이 작업 만하려고했으나, 이렇게 사용하지 않아도되었습니다. – ARP

+0

@ARP 정답으로 받아 들일 수 있습니까? 건배. –

0

을 당신 수 : 배열

  • 는 빈리스트를
  • 으로 반복을 만들

    • 종류 정렬 된 배열에 대해 : if 요소 == 이전 요소 다음에 아무것도하지 않습니다. 이전 요소를 li에 추가합니다. st

    반복이 끝나면 목록에는 고유 한 요소 만 포함됩니다.

    이것은 분명히 원래의 순서를 유지하지 않습니다.

  • 0

    이 경우 HashSet을 사용할 수 있습니다. 예를 들어,이 작동합니다 : 당신이 배열을 통해 단일 루프에서 독특한 단어를 얻을 수 있기 때문에

    Set<String> getUniqueWords(String[] words) { 
        Set<String> uniqueWords = new HashSet<>(); 
        Set<String> foundWords = new HashSet<>(); 
    
        for (String word : words) { 
         if (foundWords.contains(word)) { //O(1) 
          uniqueWords.remove(word); //O(1) 
         } else { 
          uniqueWords.add(word);  //O(1) 
         } 
         foundWords.add(word);   //O(1) 
        } 
    
        return uniqueWords; 
    } 
    

    그래서이 방법을 사용하여, 당신은 (이론적으로) 선형 시간 복잡도를해야합니다.

    관련 문제