# Python每日一练(20230427) 三数之和、编辑距离、翻转字符串单词

## 1. 三数之和

• 0 <= nums.length <= 3000
• -10^5 <= nums[i] <= 10^5

https://edu.csdn.net/practice/26654052

from typing import List
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
if len(nums) == 0:
return []
result = []
unique = {}
inv = {}
left = None
right = None
nums.sort()
i = 0
while i < len(nums):
if left == None and nums[i] >= 0:
left = i
if right == None and nums[i] > 0:
right = i
inv[nums[i]] = i
i += 1
if left == 0:
right = len(nums)
if right is None:
return []
i = 0
while i < right:
j = i+1
while j < len(nums) and (-nums[i] >= nums[j] * 2):
last = 0-nums[i]-nums[j]
k = inv.get(last)
if k and k > j:
list = [nums[i], nums[j], last]
hash = f'{list[0]}_{list[1]}_{list[2]}'
if unique.get(hash) is None:
unique[hash] = True
result.append(list)
j += 1
i += 1
return result
# %%
s = Solution()
print(s.threeSum(nums = [-1,0,1,2,-1,-4]))

[[-1, -1, 2], [-1, 0, 1]]

## 2. 编辑距离

• 插入一个字符
• 删除一个字符
• 替换一个字符

• 0 <= word1.length, word2.length <= 500
• word1word2 由小写英文字母组成

python
class Solution(object):
def minDistance(self, word1, word2):
ls_1, ls_2 = len(word1), len(word2)
dp = list(range(ls_1 + 1))
for j in range(1, ls_2 + 1):
pre = dp[0]
dp[0] = j
for i in range(1, ls_1 + 1):
temp = dp[i]
if word1[i - 1] == word2[j - 1]:
dp[i] = pre
else:
____________________________;
pre = temp
return dp[ls_1]
if __name__ == '__main__':
s = Solution()
print (s.minDistance("horse","ros"))
print (s.minDistance("intention","execution"))


https://edu.csdn.net/practice/26654053

class Solution(object):
def minDistance(self, word1, word2):
ls_1, ls_2 = len(word1), len(word2)
dp = list(range(ls_1 + 1))
for j in range(1, ls_2 + 1):
pre = dp[0]
dp[0] = j
for i in range(1, ls_1 + 1):
temp = dp[i]
if word1[i - 1] == word2[j - 1]:
dp[i] = pre
else:
dp[i] = min(pre + 1, dp[i] + 1, dp[i - 1] + 1)
pre = temp
return dp[ls_1]
if __name__ == '__main__':
s = Solution()
print (s.minDistance("horse","ros"))
print (s.minDistance("intention","execution")) 

3

5

## 3. 翻转字符串里的单词

• 输入字符串 s 可以在前面、后面或者单词间包含多余的空格。
• 翻转后单词间应当仅用一个空格分隔。
• 翻转后的字符串中不应包含额外的空格。

• 1 <= s.length <= 104
• s 包含英文大小写字母、数字和空格 ' '
• s至少存在一个 单词

• 请尝试使用 O(1) 额外空间复杂度的原地解法。

https://edu.csdn.net/practice/26654054

class Solution:
def reverseWords(self, s: str) -> str:
str_list = s.split()
s1 = ""
for n, i in enumerate(str_list[::-1]):
if n == len(str_list) - 1:
s1 = s1 + i
else:
s1 = s1 + i + " "
return s1
if __name__ == '__main__':
s = Solution()
print(s.reverseWords("the sky is blue"))
print(s.reverseWords("  hello world "))
print(s.reverseWords("a good   example"))
print(s.reverseWords("  Bob    Loves  Alice   "))
print(s.reverseWords("Alice does not even like bob"))

blue is sky the

world hello

example good a

Alice Loves Bob

bob like even not does Alice

## 🌟 每日一练刷题专栏 🌟

👍 点赞，你的认可是我坚持的动力！

🌟 收藏，你的青睐是我努力的方向！

|
3天前
|
Python
【Leetcode刷题Python】25.K 个一组翻转链表

11 0
|
8天前
|
IDE API 开发工具
|
22天前
|

Python基础语法：变量和数据类型详解（整数、浮点数、字符串、布尔值）

46 13
|
16天前
|
Python
Python小技巧：一种字符串的排序方式
Python小技巧：一种字符串的排序方式
14 0
|
4天前
|
Python
【Python】对key或values是datetime类型或时间字符串的字典dict排序

11 0
|
canal 算法 Python
＜LeetCode天梯＞Day019 验证回文串（双指针） | 初级算法 | Python
＜LeetCode天梯＞Day019 验证回文串（双指针） | 初级算法 | Python
104 0
|
7天前
|

Python 编程中的装饰器深入解析
【8月更文挑战第1天】本文将通过实例和代码演示，深入探讨 Python 中装饰器的概念、用法和高级应用。我们将从基础开始，逐步过渡到如何自定义装饰器，并展示其在日志记录、性能测试等场景下的实际用途。文章最后还将讨论装饰器的常见误区和最佳实践。
97 57
|
3天前
|
Python

【8月更文挑战第6天】在Python编程中，一些简洁有力的代码构造让程序更加灵动高效。列表推导式能一行生成列表，如squares = [x**2 for x in range(10)]。with语句确保资源自动释放，例with open(&#39;example.txt&#39;, &#39;r&#39;) as file:。lambda函数便于快速定义小函数，map(lambda x: x + 1, numbers)即可完成列表映射。
14 4
|
3天前
|
API C语言 开发者
Python如何成为跨平台编程的超级巨星：系统调用深度探索
【8月更文挑战第6天】Python凭借简洁的语法和强大的库支持，在编程领域中脱颖而出。其跨平台特性是基于CPython等解释器的设计理念，使得Python程序能在不同操作系统上运行而无需修改代码。Python标准库提供的抽象层隐藏了系统间的差异，加之ctypes等扩展机制，使开发者能高效地编写兼容性强且性能优异的应用。例如，在Windows上利用ctypes调用GetSystemTime系统API获取当前时间，展现了Python深入系统底层的强大能力和灵活性。随着技术演进，Python将继续巩固其作为首选编程语言的地位。
9 3
|
5天前
|

【8月更文挑战第3天】在编程领域，Python 因其简洁强大而广受欢迎。但随着项目规模扩大，单进程难以应对复杂需求，此时多进程间的协同就显得尤为重要。各进程像孤岛般独立运行，虽提升了稳定性和并发能力，但也带来了沟通障碍。为解决这一问题，Python 提供了多种进程间通信（IPC）方式，如管道、队列和套接字等，它们能有效促进数据交换和任务协作，使各进程像大陆般紧密相连。通过这些机制，我们能轻松搭建起高效的多进程应用系统，实现更加复杂的业务逻辑。
13 2