Вам дана строка S, и вы должны найти все удивительные подстроки S.
Удивительная подстрока - это та, которая начинается с гласной (a, e, i, o, u, A,E, I, O, U).
Ввод
Единственный аргумент - строка S.
Выход
Возвращает одно целое число X mod 10003, здесь X - количество Удивительных подстрок в данной строке.
Ограничения
- 1 <= длина(S) <= 1e6 </li>
- S может иметь специальные символы
Пример
Input
ABEC
Output
6
Explanation
Amazing substrings of given string are :
1. A
2. AB
3. ABE
4. ABEC
5. E
6. EC
here number of substrings are 6 and 6 % 10003 = 6.
Я реализовал следующий алгоритм длявыше Проблема.
class Solution:
# @param A : string
# @return an integer
def solve(self, A):
x = ['a', 'e','i','o', 'u', 'A', 'E', 'I', 'O', 'U']
y = []
z = len(A)
for i in A:
if i in x:
n = A.index(i)
m = z
while m > n:
y.append(A[n:m])
m -= 1
if y:
return len(y)%10003
else:
return 0
Выше Решение отлично работает для строк нормальной длины, но не для большей длины.
Например,
A = "pGpEusuCSWEaPOJmamlFAnIBgAJGtcJaMPFTLfUfkQKXeymydQsdWCTyEFjFgbSmknAmKYFHopWceEyCSumTyAFwhrLqQXbWnXSn"
Выше Алговыводит 1630 подмассивов, но ожидаемый ответ 1244 .
Пожалуйста, помогите мне улучшить вышеприведенный алгоритм.Спасибо за помощь