Go 如何计算字符串中连续重复的字符数
基本上,我想要实现的是不允许密码包含大量连续重复的字符/数字。 我正在尝试编写一个go函数,向该函数传递一个字符串和允许的最大连续重复字符数,它应该告诉我是否超过了该值 我曾经在javascript中通过以下方式使用正则表达式轻松完成这项工作:Go 如何计算字符串中连续重复的字符数,go,Go,基本上,我想要实现的是不允许密码包含大量连续重复的字符/数字。 我正在尝试编写一个go函数,向该函数传递一个字符串和允许的最大连续重复字符数,它应该告诉我是否超过了该值 我曾经在javascript中通过以下方式使用正则表达式轻松完成这项工作: var regexString = '(.)\\1{' + (maxAllowedRepetitions) + ',}'; var regex = new RegExp(regexString); return regex.test(string) 。
var regexString = '(.)\\1{' + (maxAllowedRepetitions) + ',}';
var regex = new RegExp(regexString);
return regex.test(string)
。。。其中MaxAllowedRepeations是最大限制。如果限制为3且字符串为“blabla”,则返回false
。如果是blaaaabla,则返回true
,因为字符“a”重复了3次以上
我发现使用goregexp很难实现同样的目标。我不介意不使用regexp。我只是需要一个好方法来实现这一点。
有什么建议吗?一个简单的循环就可以了。只要记住Go使用UTF8表示字符串。你需要比较符文(字符)而不是字节。一个简单的循环应该可以做到这一点。只要记住Go使用UTF8表示字符串。您需要比较符文(字符)而不是字节。 结果
blablaaaabla invalid ? true
blabla invalid ? false
bla∞∞bla invalid ? false
bla∞∞∞bla invalid ? true
结果
blablaaaabla invalid ? true
blabla invalid ? false
bla∞∞bla invalid ? false
bla∞∞∞bla invalid ? true
这项工作:
func AbideMaxRepetitions(max int, s string) bool {
var rr rune
rc := 0
for _, r := range s {
if rr == r {
rc++
if rc > max {
return false
}
} else {
rr = r
rc = 1
}
}
return true
}
运行时:
func main() {
ss := []string{"pass", "paaass", "paaaaaaaaaass", "ppa", "pppa", "x", "xx", "xxx"}
for _, s := range ss {
fmt.Printf("%q: %v\n", s, AbideMaxRepetitions(2, s))
}
}
印刷品:
"pass": true
"paaass": false
"paaaaaaaaaass": false
"ppa": true
"pppa": false
"x": true
"xx": true
"xxx": false
这项工作:
func AbideMaxRepetitions(max int, s string) bool {
var rr rune
rc := 0
for _, r := range s {
if rr == r {
rc++
if rc > max {
return false
}
} else {
rr = r
rc = 1
}
}
return true
}
运行时:
func main() {
ss := []string{"pass", "paaass", "paaaaaaaaaass", "ppa", "pppa", "x", "xx", "xxx"}
for _, s := range ss {
fmt.Printf("%q: %v\n", s, AbideMaxRepetitions(2, s))
}
}
印刷品:
"pass": true
"paaass": false
"paaaaaaaaaass": false
"ppa": true
"pppa": false
"x": true
"xx": true
"xxx": false
与其使用go不支持且效率更低的反向引用,不如使用for循环和计数器。与其使用go不支持且效率更低的反向引用,不如使用for循环和计数器。