0.png
P90.1 LongestPassword
Given a string containing words, find the longest word that satisfies specific conditions.
-
P90.1 最长密码
给定一个包含密码的字符串,找到符合条件的密码中长度最长的
要为银行帐户设置密码。但是,只有满足下面3个条件的密码才是有效的:
它只能包含字母和数字,例如(A−Z、A−Z、0−9);
字母的个数为偶数;
数字的个数为奇数;
一个由N个字符组成的字符串S。字符串中的密码以空格来划分,目标是选择有效的密码中最长的。如果字符串S中有k个空格,那么说明正好有K+1个密码。
例如,给定字符串“test 5 a0A pass007 ?xy1“,共有5个密码,但是其中只有3个是有效的密码:“5”、“a0A”和“pass007”。因此最长的密码是“pass007”,其长度是7。注意,密码“?xy1”中因为“?”不是字母或数字,“test”中包含偶数(0)个数字,所以均不是有效的。
编写函数:
def solution(S)
给定由N个字符组成的非空字符串S,则返回有效密码中长度最长的。如果不存在有效的密码,函数应该返回−1。例如,针对上面的示例,函数应该返回7。
假定:
- N是区间[1,200]内的整数;
- 字符串S仅由ASCII字符和空格组成。
-
解题思路
利用Python的函数ord来判断密码的字符是否符合条件。 - Python3代码
-*- coding:utf-8 -*-
# &Author AnFany
# Lesson 90:Tasks from Indeed Prime 2015 challenge
# P 90.1 LongestPassword
def solution(S):
"""
返回字符串S中符合条件的最长的字符串长度
:param S: 字符串
:return: 最长字符串的长度
"""
split_list = S.split(' ')
print(split_list)
lower = list(range(ord('a'), ord('z')+1))
upper = list(range(ord('A'), ord('Z')+1))
digit = list(range(ord('0'), ord('9')+1))
str_length = []
for i in split_list:
sign = 1
alpha = 0
number = 0
for h in i:
if ord(h) in lower or ord(h) in upper:
alpha += 1
elif ord(h) in digit:
number += 1
else:
sign = 0
break
if sign:
if not alpha % 2 and number % 2:
str_length.append(len(i))
if len(str_length) == 0:
return -1
else:
return max(str_length)
- 结果
image
点击获得更多编程练习题。欢迎Follow,感谢Star!!! 扫描关注微信公众号pythonfan,获取更多。
image
image