由于接下来是字符串类型的题目,所以先做一些字符串的知识补充。
在 Python 中,字符串是非常常用的基本数据类型。Python 的字符串(str
类型)可以看作是字符的有序集合。与 C++ 中的 std::string
类似,Python 的字符串也提供了丰富的操作接口。
std::string
类似,Python 的字符串在内存中是动态大小的,可以根据需要自动增长。构造字符串
s1 = "Hello" # 直接赋值创建字符串
s2 = str(123) # 从其他数据类型转换为字符串
s3 = "a" * 10 # 创建一个包含 10 个 'a' 字符的字符串
字符串拼接(连接)
s1 = "Hello"
s2 = "World"
s3 = s1 + " " + s2 # 使用 + 拼接
s1 += " Python" # 使用 += 拼接
获取字符串长度
s = "Hello"
length = len(s) # 获取字符串的长度
字符访问
s = "Hello"
c1 = s[1] # 访问索引为 1 的字符,结果是 'e'
c2 = s[1:4] # 获取子串,从索引 1 到 3(不包括 4),结果是 'ell'
查找子字符串
s = "Hello, World!"
pos = s.find("World") # 返回子字符串首次出现的索引,如果找不到则返回 -1
替换字符或子字符串
s = "Hello, World!"
s = s.replace("World", "Python") # 将 "World" 替换为 "Python"
删除字符(通过切片)
s = "Hello, World!"
s = s[:5] + s[7:] # 删除从位置 5 到 6 的字符(删除 ", ")
比较字符串
s1 = "Hello"
s2 = "World"
if s1 == s2:
print("Strings are equal.")
else:
print("Strings are not equal.")
给定两个字符串 A 和 B,判断字符串 B 是否可以由若干个字符串 A 连接而成。即判断是否存在一个非负整数 k,使得 B 等于 A 的 k 次连接。
如果 B 能够表示为 A 的若干次连接,则输出 "Yes",否则输出 "No"。
本题的核心问题就是判断字符串 B 是否可以由多个字符串 A 拼接而成。可以通过以下方式进行推导:
关键点分析:
如果 B 可以由若干个 A 拼接而成,那么 B 的长度应该是 A 的长度的整数倍。即 ∣B∣%∣A∣=0。 例如:
A = "ab"
B = "ababab"
lenA = len(A)
lenB = len(B)
if lenB % lenA != 0:
print("No")
return
如果 B 的长度是 A 的整数倍,那么我们可以通过重复 A 多次,构造一个新的字符串,检查这个新字符串是否等于 B。
例如:
k = lenB // lenA
constructed = A * k
if constructed == B:
print("Yes")
else:
print("No")
具体步骤:
def main():
# 输入字符串 A 和 B
A = input().strip() # 读取字符串 A
B = input().strip() # 读取字符串 B
# 计算 A 和 B 的长度
lenA = len(A)
lenB = len(B)
# 判断 B 的长度是否是 A 的整数倍
if lenB % lenA != 0:
print("No") # 如果不是,输出 "No"
return
# 计算重复的次数
k = lenB // lenA
constructed = A * k # 将 A 重复 k 次
# 比较构造的字符串和 B
if constructed == B:
print("Yes") # 如果相等,输出 "Yes"
else:
print("No") # 否则,输出 "No"
if __name__ == "__main__":
main()
input().strip()
读取输入并去除两端的空格。len()
获取字符串的长度,判断 B 的长度是否为 A 长度的整数倍。A * k
)实现重复字符串。给定两个字符串A和B。请判断字符串B是否可以由若干个字符串A连接而成。换句话说,判断是否存在一个非负整数k,使得B等于A的k次连接,即:
B=A+A+…+A(k 次)如果B可以被表示为A的若干次连接,则输出 "Yes",否则输出 "No"。
abc
abcabcabc
Yes
ab
abababac
No