https://www.hackerrank.com/challenges/the-minion-game
STUART 和KEVIN玩The Minion Game
STUART 的得分是以辅音字母开头的,KEVIN是以元音字母开头的,每有一个子字符串便的一分
笨办法是两重循环,内层循环去字符串中查找出现的次数,用一个字典存放已经查找过的子字符串。这种方法外层循环是固定子串的长度,比如第一次循环找长度为1的,以此类推。这种方法的复杂度是O(n2)
换一种思路,从字符串的第一个字符开始循环,如果是元音,则可以算出以此字母为首的子串,有len(s) - i个,i为当前字符的位置。
O(n)的方法是:
# Enter your code here. Read input from STDIN. Print output to STDOUT s = raw_input() vowels = 'AEIOU' kevsc = 0 stusc = 0 for i in range(len(s)): if s[i] in vowels: kevsc += (len(s)-i) else: stusc += (len(s)-i) if kevsc > stusc: print "Kevin", kevsc elif kevsc < stusc: print "Stuart", stusc else: print "Draw"