题解 | #密码验证合格程序#

密码验证合格程序

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
}

全部评论

相关推荐

学java时间比较短不到三个月,基本的技术栈都过了一遍就是都不太深,有个小项目。是继续找实习还是沉淀准备秋招呢?找实习的话会花很多时间在八股,放弃的话又怕秋招简历太难看。有无大佬支招
今天java了吗:1.一定要找实习,实习不一定要去,但是找实习过程中的面试经验和心态经验才是最重要的 2.八股本来就是大头,甚至比项目重要 3.这个时间段也是面试比较多的阶段,可以抓住机会锻炼。面试才会发现自己的不足,感觉自己会了和能给面试官娓娓道来是两码事
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
05-01 13:13
ecece:这么明目张胆虚报就业率啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务