package main
import (
"fmt"
)
func main() {
var password string
for true {
if _, err := fmt.Scan(&password); err != nil {
break
}
// 1、长度不少于8位
if len(password) < 8 {
fmt.Println("NG")
continue
}
// 2、必须要包含三种以上的字符
keyTypeMap := make(map[string]int)
for _, key := range password {
if key >= '0' && key <= '9' {
keyTypeMap["number"] = 1
} else if key >= 'A' && key <= 'Z' {
keyTypeMap["upLetter"] = 1
} else if key >= 'a' && key <= 'z' {
keyTypeMap["loLetter"] = 1
} else {
keyTypeMap["symbol"] = 1
}
}
// fmt.Println(keyTypeMap)
typeCount := 0
for _, typeV := range keyTypeMap {
if typeV == 1 {
typeCount++
}
}
if typeCount < 3 {
fmt.Println("NG")
continue
}
// 3、不能出现重复子串
// todo: 思路:做一个3个字符的滑动块,作为map的key,如果有重复的就NG
if checkRepeat(password) {
fmt.Println("OK")
} else {
fmt.Println("NG")
}
}
}
// 校验重复子串
func checkRepeat(password string) bool {
repeatMap := make(map[string]bool)
var repeatKey string
for i := 3; i < len(password); i++ {
repeatKey = password[i-3 : i]
if _, exist := repeatMap[repeatKey]; exist {
return false
} else {
repeatMap[repeatKey] = true
}
}
return true
}