Codility每周一课:P90.1 LongestPassword

Codility每周一课:P90.1 LongestPassword_第1张图片
0.png
P90.1 LongestPassword

Given a string containing words, find the longest word that satisfies specific conditions.

  • P90.1 最长密码
    给定一个包含密码的字符串,找到符合条件的密码中长度最长的

要为银行帐户设置密码。但是,只有满足下面3个条件的密码才是有效的:

  1. 它只能包含字母和数字,例如(A−Z、A−Z、0−9);

  2. 字母的个数为偶数;

  3. 数字的个数为奇数;

一个由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。

假定:

  1. N是区间[1,200]内的整数;
  2. 字符串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,获取更多。

Codility每周一课:P90.1 LongestPassword_第2张图片
image
Codility每周一课:P90.1 LongestPassword_第3张图片
image

你可能感兴趣的:(Codility每周一课:P90.1 LongestPassword)