题解 | 密码验证合格程序

package main

import (
	"fmt"
	"strings"
)

func CheckPwdCondition1(pwd string) bool {
	return len(pwd) > 8
}

func CheckPwdCondition2(pwd string) bool {
	containBig := false
	containSmall := false
	containSpecail := false
	containNum := false

	for _, b := range []byte(pwd) {
		switch {
		case b == ' ' || b == '\n':
			return false
		case b >= 'A' && b <= 'Z':
			containBig = true
		case b >= 'a' && b <= 'z':
			containSmall = true
		case b >= '0' && b <= '9':
			containNum = true
		default:
			containSpecail = true
		}
	}

	trueCount := 0
	if containBig {
		trueCount++
	}
	if containSmall {
		trueCount++
	}
	if containSpecail {
		trueCount++
	}
	if containNum {
		trueCount++
	}

	return trueCount >= 3
}

func CheckPwdCondition3(pwd string) bool {
	for i := 0; i < len(pwd); i++ {
		for l := 3; l < len(pwd)/2; l++ {
			if i+l > len(pwd)-1 {
				break
			}

			sub := pwd[i : i+l]
			lastStr := pwd[i+l:]

			if strings.Contains(lastStr, sub) {
				return false
			}
		}
	}

	return true
}

func main() {
	for {
		var input string
		fmt.Scan(&input)

		if len(input) == 0 {
			break
		}

		if !CheckPwdCondition1(input) {
			fmt.Println("NG")
			continue
		}
		if !CheckPwdCondition2(input) {
			fmt.Println("NG")
			continue
		}
		if !CheckPwdCondition3(input) {
			fmt.Println("NG")
			continue
		}

		fmt.Println("OK")
	}
}

全部评论

相关推荐

飞花断音:这个头像有点搞笑
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务