повторяющаяся проблема со строкой в ​​хакерранке с использованием python? - PullRequest
4 голосов
/ 26 мая 2020

мы хотим найти количество 'a' в данной строке s, умноженное на бесконечное количество раз. нам будет дано число n, которое является размером среза бесконечной строки. пример ввода aba 10

вывод: - 7 здесь aba умножается на 10, в результате получается 'abaabaabaa', а количество 'a равно 7, это мой код

def repeatedString(s, n):
    count = 0
    inters = s * n
    reals = s[0:n+1]
    for i in reals:
        if (i == 'a'):
            count += 1
    return count

Я получение 2 вместо 7 на выходе (тестовый пример 'aba' 10). где я go ошибся? Я просто умножил данную строку на n, потому что она никогда не будет больше размера нарезки.

вот ссылка на проблему https://www.hackerrank.com/challenges/repeated-string/problem

Ответы [ 5 ]

4 голосов
/ 26 мая 2020

Намного более простое решение с использованием python3.

s = input().strip()
n = int(input())
print(s[:n%len(s)].count('a')+(s.count('a')*(n//len(s))))
0 голосов
/ 30 августа 2020

Я использовал простой унитарный метод. Число 'a' в одном повторении составляет cnt_a, поэтому количество 'a' в первых n символах будет (cnt_a/len(s)) * n

def repeatedString(s, n):
    if len(s)==1 and s=='a':
        return n
    cnt_a=0
    for i in s:
        if i == 'a':
            cnt_a+=1
    if cnt_a % 2 == 0:
        no_a = (cnt_a/len(s)) * n
        return math.ceil(no_a)
    else:
        no_a = (cnt_a/len(s)) * n
        return math.floor(no_a)
0 голосов
/ 17 июня 2020

Решение в Python 3:

def repeatedString(s,n):
    i = 0
    c = 0
    for i in s:
        if i == 'a':
            c += 1

    q = int(n / len(s)) #Finding the quotient 
    r = int(n % len(s)) #Finding the remainder
    if r == 0: 
        c *= q 

    else:
        x = 0
        for i in range(r):
            if s[i] == 'a':
                x += 1
        c = c*q + x

    return int(c)

s = input()
n = int(input())
print(repeatedString(s,n))
0 голосов
/ 26 мая 2020

поэтому, если строка содержит "a", просто верните n. в противном случае подсчитайте количество a в строке s, теперь, используя функцию divmond (), я нашел количество строк, которые можно добавить, не превышая n. например, строка s - это «aba» и n = 10, поэтому я могу полностью добавить 3 «abs», не превышая длину строки 10. Теперь количество а в добавленной строке (3 * 2). Теперь оставшиеся места равны остатку (y) функции divmond (). Теперь разрежьте строку s до y, найдите в ней число a и добавьте его в счет.

divmond (10,3) возвращает (10 // 3) и остаток.

def repeatedString(s, n):
    if len(s)==1 and s=="a":
        return n
    count=s.count("a") 
    x,y=divmod(n,len(s))
    count=count*x
    str=s[:y]
    return count+str.count("a")
0 голосов
/ 26 мая 2020

Нет причин разрезать строку

def repeatedString(s, n):
    count = 0
    for index, i in enumerate(s*n):
        if index >= n:
            return count
        if(i == 'a'):
            count += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...