题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
package main import ( "bufio" "fmt" "os" ) func main(){ secretCheck() } func secretCheck() { in := bufio.NewScanner(os.Stdin) var res string for in.Scan() { codeStr := in.Text() if in.Text() == "stop" { break } code := []rune(codeStr) if len(code) < 8 { res += "NG\n" continue } if classCount(code) < 3 { res += "NG\n" continue } if isContainSubstring(code) { res += "NG\n" continue } res += "OK\n" } fmt.Println(res) } func classCount(code []rune) int { var res int if containInvalidSig(code) { fmt.Println("No Valid Signal!") } if containBigAlp(code) { res++ } if containSmallAlp(code) { res++ } if containDigit(code) { res++ } if containOtherSig(code) { res++ } return res } func containBigAlp(code []rune) bool { for i := range code { if code[i] >= 'A' && code[i] <= 'Z' { return true } } return false } func containSmallAlp(code []rune) bool { for i := range code { if code[i] >= 'a' && code[i] <= 'z' { return true } } return false } func containDigit(code []rune) bool { for i := range code { if code[i] >= '0' && code[i] <= '9' { return true } } return false } func containOtherSig(code []rune) bool { for i := range code { if code[i] >= 'A' && code[i] <= 'Z' { continue } if code[i] >= 'a' && code[i] <= 'z' { continue } if code[i] >= '0' && code[i] <= '9' { continue } if code[i] == '\n' || code[i] == ' ' { continue } return true } return false } func containInvalidSig(code []rune) bool { for i := range code { if code[i] == '\n' || code[i] == ' ' { return true } } return false } const subStringLen int = 3 func isContainSubstring(code []rune) bool { return isContainLenSubstring(code, subStringLen) } func isContainLenSubstring(code []rune, length int) bool { var ( i int ma map[string]int ) ma = make(map[string]int, 0) for i = 0; i < len(code)-length; i++ { if _, ok := ma[string(code[i:i+length])]; ok { return true } ma[string(code[i:i+length])] = 1 } return false }