027 - Sign Up Requests (★2)

027 - Sign Up Requests (★2)

キーワード

解説

入力された文字がすでに入力されているかを確かめれば良い. setを用いれば O(1)\mathrm{O}(1) で確認ができる.

go でsetを用いるには,github.com/liyue201/gostl/ds/setが必要.

import (
    "github.com/liyue201/gostl/ds/set"
	"github.com/liyue201/gostl/utils/comparator"
)
 
func main() {
    s := set.New(comparator.StringComparator)
    str := "hello"
    s.Insert(str) // 挿入
    s.Contains(str) // 存在のチェック
}

あるいは, mapを用いて,

m := map[string]bool{}
 
str := "world"
 
m[str] = true
m[str] // 存在チェック

mapを用いた場合の存在チェックは,

if val, ok := m[key]; ok {
    // ...
}

でもできる. 存在する場合は, valには対応する値, oktrueが入り, 存在しない場合は, valは規定値, okfalseが入る.

提出コード

import (
    "github.com/liyue201/gostl/ds/set"
	"github.com/liyue201/gostl/utils/comparator"
)
 
// ...
 
func main() {
	n := readInts()[0]
	s := set.New(comparator.StringComparator)
 
	for i := 0; i < n; i++ {
		str := readStrings()[0]
 
		if s.Contains(str) {
			continue
		}
 
		writeLine(i + 1)
		s.Insert(str)
	}
}