字符串

1. 给你一个仅包含小写英文字母和 '?' 字符的字符串 s,请你将所有的 '?' 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。

注意:你 不能 修改非 '?' 字符。

题目测试用例保证 除 '?' 字符 之外,不存在连续重复的字符。

在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。

import numpy as np
import random
def replace_str(str,str_total):
    str_len=len(str)

    #产生一个随机数
    number=random.randint(0,25)
    str_obj=""

    for i in range(str_len):

        if str[i]=="?":
            if i==0:
                # ?下一个字符
                temp_right = str[i + 1]
                # 删除连续字符串
                str_total.replace(temp_right, "")
            elif i==str_len-1:
                # ?上一个字符
                temp_left = str[i - 1]
                # 删除连续字符串
                str_total.replace(temp_left, "")

            else:
                #?上下一个字符
                temp_right=str[i+1]
                temp_left=str[i-1]
                #删除连续字符串
                str_total.replace(temp_right,"")
                str_total.replace(temp_left, "")
                #随即选取需要替换的字符串
            str_rep=str_total[number]
            str_obj+=str_rep

        else:
            str_obj+=str[i]


    return str_obj

str_total="abcdefghigklmnopqrstuvwxyz"
str=s = "ubv?w"
result=replace_str(str,str_total)
print(result)

 2.给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。

这里 if n%i==0这句判断函数的作用是判断i是否的n的约数,如果是就将s分为n/i个窗口逐个比较,没符合一次向后滑动一次,最后查看窗口的位置,如果已经滑到了s的最后,那么则符合题意,返回true

逐个判断完所有的0-n//2的数后如果仍然没找到符合条件的数那么返回false

def find_str(str):
    str_len=len(str)
    for i in range(1,str_len//2+1):#i为子串的长度
        if str_len%i==0:
            a=str[:i]#子串
            j=i
            while j<str_len and str[j:j+i]==a:
                j+=i
            if j==str_len:
               return True
    return False


result=find_str("ababa")
print(result)

 

posted on 2020-10-10 10:49  happygril3  阅读(101)  评论(0)    收藏  举报

导航