2017网易内推编程题(判断单词):解答代码

小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
例如:
小易不喜欢”ABBA”,因为这里有两个连续的’B’
小易不喜欢”THETXH”,因为这里包含子序列”THTH”
小易不喜欢”ABACADA”,因为这里包含子序列”AAAA”
小易喜欢”A”,”ABA”和”ABCBA”这些单词 给你一个单词,你要回答小易是否会喜欢这个单词。

输入描述:

输入为一个字符串,都由大写字母组成,长度小于100

输出描述:

如果小易喜欢输出”Likes”,不喜欢输出”Dislikes”

输入例子:

AAA

输出例子:

Dislikes

解答代码:

# -*- coding:utf-8 -*- 
# 2016/8/19
# mail:ybs.kakashi@gmail.com
from collections import defaultdict


input_words = raw_input("please input your words:\n")
checkers = list()


def check_1(words):
    if words.islower() is True:
        return False
    if words.upper() == words:
        return True
    return False


def check_2(words):
    index_dic = defaultdict(list)
    for i, j in enumerate(words):
        index_dic[j].append(i)
    for e in index_dic.keys():
        if len(index_dic[e]) != 2:
            del index_dic[e]
    temp = [0 for x in range(len(words))]
    for i, j in enumerate(words):
        if j in index_dic.keys():
            temp[i] = j
    temp = [x for x in temp if x != 0]
    return not check_3(temp)


def check_3(words):
    temp = list()
    for each in words:
        if len(temp) == 0:
            temp.append(each)
            continue
        if temp.pop() == each:
            return False
        else:
            temp.append(each)
    return True


checkers.extend((check_1, check_3, check_2))

for each in checkers:
    if not each(input_words):
        print "Dislike", " by " + str(each)
        exit(0)
print "like"

 

转载于:https://my.oschina.net/u/2504425/blog/735031

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值