子字符串计数

时间:2021-11-23 18:48:19

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"