从给定的列表[a,b,c,d,e,f,g],从给定的列表中随机挑选20次以生成随机字符串,输出在该字符串中出现了第i个只出现了j次的字母(i, j为键盘输入)。
时间: 2023-05-26 21:04:49 浏览: 42
这是一个比较容易的算法问题,需要用到随机数生成和字符串操作。
可以写一个函数,输入一个列表和一个整数n,返回该列表中随机挑选n次以生成的随机字符串。具体实现可以用Python的random模块中的choice函数选择每次挑选的元素,然后用字符串的拼接操作将它们连接起来。示例代码如下:
```python
import random
def generate_random_string(lst, n):
s = ''
for i in range(n):
s += random.choice(lst)
return s
```
然后,需要写一个函数来统计字符串中每个字母出现的次数。可以用字典来实现,将字母作为键,出现的次数作为值,遍历字符串中的每个字符,将它们加入字典中。示例代码如下:
```python
def count_chars(s):
d = {}
for c in s:
if c in d:
d[c] += 1
else:
d[c] = 1
return d
```
最后,可以根据输入的i和j,在生成的随机字符串中查找第i个只出现了j次的字母。可以遍历字典中每个键值对,找到符合条件的字母,然后判断它是否为第i个。示例代码如下:
```python
def find_ij_char(s, i, j):
d = count_chars(s)
count = 0
for c, freq in d.items():
if freq == j:
count += 1
if count == i:
return c
return None
```
最后,只需要读取输入的i和j,调用以上的三个函数即可。完整代码如下:
```python
import random
def generate_random_string(lst, n):
s = ''
for i in range(n):
s += random.choice(lst)
return s
def count_chars(s):
d = {}
for c in s:
if c in d:
d[c] += 1
else:
d[c] = 1
return d
def find_ij_char(s, i, j):
d = count_chars(s)
count = 0
for c, freq in d.items():
if freq == j:
count += 1
if count == i:
return c
return None
lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
n = 20
s = generate_random_string(lst, n)
i = int(input("请输入 i:"))
j = int(input("请输入 j:"))
c = find_ij_char(s, i, j)
if c is not None:
print("在随机字符串中第 %d 个只出现了 %d 次的字母是 %s" % (i, j, c))
else:
print("在随机字符串中没有找到第 %d 个只出现了 %d 次的字母" % (i, j))
```
注意,该算法的时间复杂度是O(n),其中n为生成随机字符串的长度。当n很大时,该算法的效率会比较低。如果需要提高效率,可以使用一些高效的数据结构来代替字典,比如堆或链表。