>백엔드 개발 >Golang >한 문자열 조각에서 다른 문자열 조각에 없는 요소를 효율적으로 찾는 방법은 무엇입니까?

한 문자열 조각에서 다른 문자열 조각에 없는 요소를 효율적으로 찾는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-08 20:43:10140검색

How to Efficiently Find the Elements in One String Slice That Are Not in Another?

두 문자열 슬라이스의 차이점 찾기

프로그래밍에서 문자열 슬라이스를 다룰 때 두 세트의 차이점을 확인해야 하는 경우가 많습니다. 다음 시나리오를 고려해 보십시오.

slice1 := []string{"foo", "bar","hello"}
slice2 := []string{"foo", "bar"}

slice1에는 존재하지만 Slice2에는 없는 요소를 식별하고 출력하는 것이 목표입니다.

효율적인 조회를 위해 HashMap 활용

차이를 효율적으로 계산하기 위해 Go 맵을 활용할 수 있습니다. Go의 지도는 상수 시간(O(1)) 조회를 제공하므로 집합에 요소가 존재하는지 빠르게 확인할 수 있습니다.

차이 함수 구현

다음은 지도를 사용한 차이 함수 구현입니다.

// difference returns the elements in `a` that aren't in `b`.
func difference(a, b []string) []string {
    mb := make(map[string]struct{}, len(b))
    for _, x := range b {
        mb[x] = struct{}{}
    }
    var diff []string
    for _, x := range a {
        if _, found := mb[x]; !found {
            diff = append(diff, x)
        }
    }
    return diff
}

Breaking Down 함수

  • slice2의 길이와 동일한 용량을 갖는 맵 mb가 생성됩니다. 이 맵은 Slice2의 요소를 키로 저장하여 효과적으로 세트를 생성합니다.
  • slice2를 반복하여 각 요소를 mb의 키로 추가합니다.
  • slice1의 각 요소에 대해 확인합니다. mb 단위의 키로 존재하는 경우. 그렇지 않은 경우에는 이를 diff 슬라이스에 추가하고, 이는 Slice1에 고유한 요소를 보유합니다.
  • 마지막으로 diff 슬라이스를 결과로 반환합니다.

이 구현의 대략적인 시간 복잡도는 O(n)입니다. 여기서 n은 슬라이스1과 슬라이스2의 최대 길이입니다. 효율성은 맵에서 수행되는 일정한 시간 작업에서 비롯되며, 이를 통해 조회 및 삽입이 빨라집니다.

위 내용은 한 문자열 조각에서 다른 문자열 조각에 없는 요소를 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.