给定一个整数X和一个由空格分隔的文本和数字交替放置的字符串str ,任务是对字符串进行排序,以使文本和数字在删除所有小于X的数字后,以相关的数字降序出现。如果两个字符串具有相同的值,则按字符串的字典顺序对其进行排序。
例子:
Input: X = 79, str = “Geek 78 for 99 Geeks 88 Gfg 86”
Output:
for 99 Geeks 88 Gfg 86
Explanation:
“Eve 99” is removed, since the number associated to it is smaller than X(= 79)
Now, the reordered string string based on decreasing order of numbers associated is “Bob 99 Suzy 88 Alice 86”.
Input: X = 77, str = “Axc 78 Czt 60”
Output: Axc 78
方法:想法是使用冒泡排序技术。请按照以下步骤解决问题:
- 将字符串拆分为一个列表,然后删除小于给定值(即X)的条目。
- 使用气泡排序方法根据与列表关联的数字对列表进行排序。
- 如果数字不相等,请按降序对数字进行排序,并同时对名称进行排序。
- 如果数字相等,则按字典顺序对它们进行排序。
- 将字符串和数字同时交换,以使其保持在一起。
下面是上述方法的实现:
Python3
# Python Program to implement
# the above approach
# Function to split the input
# string into a list
def tokenizer(Str):
List = Str.split()
return List
# Function to sort the given list based
# on values at odd indices of the list
def SortListByOddIndices(List, x):
l = len(List)
# Function to remove the values
# less than the given value x
for i in range(l - 1, 0, -2):
if int(List[i]) < x:
del(List[i - 1: i + 1])
l = len(List)
for i in range(1, l, 2):
for j in range(1, l - i, 2):
# Compares values at odd indices of
# the list to sort the list
if List[j] < List[j + 2] \
or (List[j - 1] > List[j + 1] \
and List[j] == List[j + 2]):
List[j], List[j + 2] \
= List[j + 2], List[j]
List[j - 1], List[j + 1] \
= List[j + 1], List[j - 1]
return ' '.join(List)
# Driver Code
Str = "Axc 78 Czy 60"
x = 77
# Function call
List = tokenizer(Str)
Str = SortListByOddIndices(List, x)
print(Str)
输出:
Axc 78
时间复杂度: O(N 2 )
辅助空间: O(N)