一、给定一个字符串 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