简体   繁体   中英

Find the total number of occurrence of a string in a cyclic string

I'm currently learning Python and I'm stuck on this specific question. Image

Here is my current code:

word = input()
text = 0
wordch = 0
positions = 0
repeated = 0


while repeated != 2:
    for i in range(0, len(tablet)):
        if tablet[i] == word[wordch]:
            text += 1
            wordch += 1
            if text == len(word):
                positions += 1
                text = 0
                wordch = 0
            elif repeated == 1 and text == len(word):
                positions += 1
                text = 0
                wordch = 0
                break
            elif i == len(tablet)-1:
                repeated += 1
                break
        elif tablet[i] != word[wordch]:
            text == 0
            wordch == 0
        

print(positions)

I would hope for a code that is really basic using the same concepts but please do answer. Thank you!

I have tried to solve the problem by using a different approach. As we know that we can only use (len(fav_word)) - 1 letters if we tried to create the substring in a cyclic manner from the end since if we took any more characters, we would have created them from the start itself without the cycle.

So, I just created a new string from the original string by appending the starting (len(fav_word)) - 1 to the original string and then find all occurrences of the fav_string in the new string.

def find_all(a_str, sub):
    start = 0
    while True:
        start = a_str.find(sub, start)
        if start == -1: return
        yield start
        start += 1

x = "cabccabcab"
fav = "abc"
y = x + x[0:len(fav)-1]
print(len(list(find_all(y, fav)))) # Output: 3

x = "ababa"
fav = "aba"
y = x + x[0:len(fav)-1]
print(len(list(find_all(y, fav)))) # Output: 2

x = "aaaaaa"
fav = "aa"
y = x + x[0:len(fav)-1]
print(len(list(find_all(y, fav)))) # Output: 6

x = "abaaba"
fav = "aaba"
y = x + x[0:len(fav)-1]
print(len(list(find_all(y, fav)))) # Output: 2
def find_str(g,find):
    lg = len(g)
    lf = len(find)
    x=0
    s=""
    for index, i in enumerate(g):
        if i == find[0]:
            if index+lf <= lg:
                s = "".join(g[index:index+lf])
                if s == find:
                    x+=1
            else:
                rem = "".join(g[index:])

    lr = len(rem)
    for index,i in enumerate(g):
        rem+=i
        lr+=1
        if lr == lf:
            if rem == find:
                x+=1
            break
    return x
print(find_str("abaaba","aaba"))
def split(word): 
    return [char for char in word]          
    
x = "aaaaaa"
pattern = "aa"

mylist=split(x)
ok=True
occurrences=0
buffer=""
while ok:
    char=mylist.pop(0)
    buffer+=char
    if buffer==pattern:
       occurrences+=1
       buffer=""
    if len(mylist)==0:
        ok=False
 print(occurrences)

 output:3

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM