(小甲鱼字符串III编程)1.给定一个字符串 text 和字符串列表 words,返回 words 中每个单词在 text 中的位置。2.编写一个程序,判断输入的字符串是否由多个子字符串重复多次构成。

一、给定一个字符串 text 和字符串列表 words,返回 words 中每个单词在 text 中的位置(要求最终的位置从小到大进行排序)。

举例:

text:“I love FishC and FishC love me”
words:“FishC”
输出:[[7, 11], [17, 21]]

text:“I love FishC and FishC love me”
words:“FishC love”
输出:[[2, 5], [7, 11], [17, 21], [23, 26]]

text:“FCFCF”
words:“FCF FC”
输出:[[0, 1], [0, 2], [2, 3], [2, 4]]

程序实现如下:
在这里插入图片描述

对索引的查找需要用到 find()函数

答案代码:

text = input("请输入text的内容:")
words = input("请输入words的内容:")
words = words.split()
    
result = []
for each in words:
    temp = text.find(each)    # 字符串元素第一次出现的位置
    while temp != -1:         # 进行元素查找时,所有元素都可以找到
        result.append([temp,temp+len(each)-1])    # 将第一次找到的元素索引放到列表中
        temp = text.find(each, temp+1)        # 接着寻找第二次words元素出现的位置。
    
print(sorted(result))             # 对找到的元素进行排序

结果:
在这里插入图片描述

二、 编写一个程序,判断输入的字符串是否由多个子字符串重复多次构成。

举例:

输入:“FCFC”
输出:True

输入:“FishCFish”
输出:False

输入:“FCCF”
输出:False

输入:“FishCFishc”
输出:False

程序实现如下:
在这里插入图片描述
提示:

如果一个长度为 n 的字符串 s 可以由它的一个长度为 i 的子串 s’ 重复多次构成,那么必须要满足以下条件:
n 一定是 i 的倍数
s‘ 一定是 s 的前缀子字符串
n 除以 i 的结果必定是 s’ 在 s 中出现的次数

答案代码:

s = input("请输入一个由字母构成的字符串:")
    
n = len(s)
for i in range(1, n//2+1):
    # 如果子字符串的长度为i,则n必须可以被i整除才行
    if n % i == 0:
        # 如果子字符串的长度为i,则i到i*2之间是一个重复的子字符串
        if s.startswith(s[i:i*2]) and s.count(s[i:i*2]) == n/i:
            print(True)
            break
# for...else的用法
else:
    print(False)

代码中函数startswith()的用法可以看小甲鱼 字符串III

结果:
在这里插入图片描述

题目来自小甲鱼字符串III

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值