小编vni*_*_63的帖子

判断一个字符串是否是回文

这是一个python问题。答案应该是 O(n) 时间复杂度并且不使用额外的内存。作为输入,我得到一个应该归类为回文或不归类的字符串(回文是一个单词或短语,可以从左到右和从右到左阅读相同的单词或短语,fe“级别”)。在输入中可以有标点符号和单词之间的间隙。例如“我。做了,,,我是吗????” 主要目标是确定输入是否为回文。

当我试图解决这个问题时,我遇到了几个挑战。当我尝试删除非字母数字时

for element in string:
    if ord(element) not in range(97, 122):
        string.remove(element)
    if ord(element) == 32:
        string.remove(element)
Run Code Online (Sandbox Code Playgroud)

我使用 O(n^2) 复杂度,因为对于字符串中的每个元素,我都使用 remove 函数,它本身具有 O(n) 复杂度,其中 n 是列表的长度。我需要帮助通过消除 O(n) 复杂度的非字母字符来优化部件

此外,当我们去掉空格作为标点符号时,我知道如何检查一个单词是否是回文,但我的方法使用了额外的内存。

python algorithm time-complexity space-complexity

3
推荐指数
1
解决办法
219
查看次数

对元组列表进行排序时的多个要求

我有一个元组列表,即[(7, 14), (3, 12), (20, 22), (6, 14), (2, 12)]. 我想按元组中的第二个值对其进行排序,但如果第二个值相同,我希望排序列表中较早的元素具有较低的第一个值。为了更清楚,(6,14)应该在排序列表的前面,然后(7, 14)

现在我有以下代码:

result = [(7, 14), (3, 12), (20, 22), (6, 14), (2, 12)]
result.sort(key = lambda a: a[1])
Output[]: [(3, 12), (2, 12), (7, 14), (6, 14), (20, 22)]
Run Code Online (Sandbox Code Playgroud)

我想要的是:

Output[]: [(2, 12), (3, 12), (6, 14), (7, 14), (20, 22)]
Run Code Online (Sandbox Code Playgroud)

python tuples list

3
推荐指数
1
解决办法
60
查看次数

根据元组的值以不同的顺序对元组列表进行排序

当我们想要对元组列表进行排序时,每个元组的长度都是 3(全部递增),我们对以下代码进行修改

ts = [(7, 14, 5), (3, 12, 9), (20, 22, 8), (20, 23, 24), (3, 12, 8), (4, 5, 7), (4, 5, 6), (4, 22, 17)]
ts.sort(key=lambda t: (t[0], t[1], t[2]))
Run Code Online (Sandbox Code Playgroud)

我的意思是,最初比较位置零的元素,元组中的零元素越低,它越接近开头。如果两个元组在位置 0 处具有相同的值,则第二个元素较低的元素将更靠近左侧。如果两个元组具有相同的第二个元素,则考虑元组中的第三个元素。

所以上面代码的输出是

Output: [(3, 12, 8), (3, 12, 9), (4, 5, 6), (4, 5, 7), (4, 22, 17), (7, 14, 5), (20, 22, 8), (20, 23, 24)]
Run Code Online (Sandbox Code Playgroud)

但是,如果我想在某些情况下(不是全部)反转顺序,例如比较第一个元素,并且如果一个元组的第一个元素较小,则它在排序列表中的位置较早,该怎么办?但如果第一个元素相同,则第一个元素较大的元组将在列表中靠前。如果元组中的第二个元素相同,则第一个元素较大的元组将在列表中靠前。

这也可以描述为:

  • 首先考虑元组中的第一个元素,按升序对它们进行排序

  • 如果元组中的第一个元素相同,则按降序对它们进行排序

  • 如果元组中的第二个元素相同,则按降序对它们进行排序

所以,我提供的输入应该是

Output: [(3, 12, 9), (3, 12, …
Run Code Online (Sandbox Code Playgroud)

python tuples

3
推荐指数
1
解决办法
2541
查看次数