📅  最后修改于: 2023-12-03 15:11:33.177000             🧑  作者: Mango
这是 SP2 竞赛中的第 18 个问题,需要能够处理字符串和算法问题的程序员来解决。该问题需要设计一个算法,能够快速地检查一个字符串是否符合某些特定规则。
给定一个只包含小写字母和数字的字符串,判断该字符串是否符合如下规则:
如果字符串符合上述规则,则输出 "Yes",否则输出 "No"。
该问题需要同时检查字符串的长度、字符种类、连续字符和连续数字的规则。我们可以依次检查每个规则,如果某个规则不满足,则直接输出 "No"。若所有规则都满足,则输出 "Yes"。
对于第 1 个规则,我们只需检查字符串的长度是否为 32 即可。对于第 2 个规则,我们可以使用正则表达式来检查字符串是否仅包含 16 个小写字母和 16 个数字:
import re
if not re.match(r'^[a-z\d]{32}$', s):
print('No')
return
对于第 3 和第 4 个规则,我们可以遍历字符串,维护两个计数器,一个用来统计连续字符的长度,另一个用来统计相邻字符位于不同种类中的长度。如果某个计数器的值超过了 2,则直接输出 "No"。
count = 1
last_char = s[0]
for i in range(1, len(s)):
if s[i] == last_char:
count += 1
if count > 2:
print('No')
return
else:
count = 1
if i > 1 and s[i].isdigit() == s[i - 2].isdigit():
print('No')
return
if i > 2 and s[i] == s[i - 2] == s[i - 3]:
print('No')
return
last_char = s[i]
import re
s = input()
# Check length
if len(s) != 32:
print('No')
exit()
# Check character types
if not re.match(r'^[a-z\d]{32}$', s):
print('No')
exit()
# Check consecutive characters and digits
count = 1
last_char = s[0]
for i in range(1, len(s)):
if s[i] == last_char:
count += 1
if count > 2:
print('No')
exit()
else:
count = 1
if i > 1 and s[i] == s[i - 2] == s[i - 3]:
print('No')
exit()
if i > 2 and s[i].isdigit() == s[i - 2].isdigit():
print('No')
exit()
last_char = s[i]
# Passed all rules
print('Yes')