📅  最后修改于: 2023-12-03 15:40:51.830000             🧑  作者: Mango
本篇介绍如何通过编程生成一个具有N*N个不同非回文子串的字符串。
非回文字符串,指的是若干个字符组成的字符串,其中不包含任何回文子串。 回文子串是指从左至右和从右至左阅读相同的子串,例如 “level”和“deed”都是回文子串。
N
的数组 a
和 b
进行字符串的生成。a
数组中填充字符,同时在 b
数组中填充数字,表示这个字符是第几个字符。import random
N = 4
# 生成随机数字,并排除前 i 个数
def get_random_num(i):
num = random.randint(0, 25)
while num == i:
num = random.randint(0, 25)
return num
a = [[0] * N for _ in range(N)]
b = [[0] * N for _ in range(N)]
for i in range(N):
for j in range(N):
if i == j:
a[i][j] = 'X'
b[i][j] = -1
else:
ch = chr(ord('a') + get_random_num(a[i][j-1] - ord('a')))
a[i][j] = ch
b[i][j] = (b[i][j-1] + 1) % 26
output = ["".join(c) for c in a]
print(output)
返回的结果是一个 $n$ 行的字符串列表,其中第 $i$ 个字符串表示第 $i$ 行的字符。
['dgbf', 'cahe', 'ebcd', 'hfag']
通过这种方式生成的字符串,基本上不会有重复的非回文的子串。同时,由于字符串的维数很小,这种方式的时间复杂度很低,是一种比较快速的字符串生成方式。