151. 反转字符串中的单词
给你一个字符串 s
,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s
中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
算法思想:把字符串整体反转后,再对每个单词进行反转。
"the sky is blue "
- 移除多余空格 : "the sky is blue"
- 字符串反转:"eulb si yks eht"
- 单词反转:"blue is sky the"
特殊操作 移除空格操作:类似 27.移除元素,快慢指针
方法一:
class Solution:
def reverseWords(self, s: str) -> str:
# s = " hello world "
# 删除字符串两边的空格
s = s.strip() # "hello world"
# 反转整个字符串
s = s[::-1] #dlrow olleh
# 字符串是不可变类型,s.split()将字符串 s 按空格分割成单词列表 ["dlrow", "olleh"]
# 反转每个单词 ["world","hello"]
# 将每个单词以空格连接起来并恢复成字符串“world hello”
s = ''.join(word[::-1] for word in s.split())
strip()
在 Python 中,
strip()
是一个字符串方法,用于去除字符串两端的空白字符(包括空格、制表符\t
、换行符\n
等)。这个方法返回一个新的字符串,不会修改原始字符串。主要特点
- 去除空白字符:
strip()
默认去除字符串两端的所有空白字符。- 返回新字符串:原始字符串不会被修改,
strip()
返回一个新的字符串。- 可选参数:
strip()
方法还可以接受一个字符串参数,表示要去除的特定字符。例如s= s.strip('-')
split()
在 Python 中,
split()
是一个字符串方法,用于将字符串分割成多个子字符串,并返回一个列表。它通常用于处理以空格或特定分隔符分隔的文本数据。默认分隔符(空格)
s = "Hello World! This is Python." words = s.split() # 默认按空白字符分割 print(words) # 输出: ['Hello', 'World!', 'This', 'is', 'Python.']
默认行为:
- 如果不提供参数,
split()
会以任意数量的空白字符(空格、制表符、换行符等)作为分隔符。- 连续的空白字符会被视为一个分隔符。
指定分隔符:
- 可以通过传递一个字符串参数来指定自定义的分隔符。
s = "apple,banana,cherry" fruits = s.split(',') # 按逗号分割 print(fruits) # 输出: ['apple', 'banana', 'cherry']
限制分割次数:
split()
方法可以接受第二个参数maxsplit
,用于限制分割的次数。s = "one two three four five" result = s.split(' ', 2) # 最多分割成 3 个部分 print(result) # 输出: ['one', 'two', 'three four five']
注意事项
- 返回值:
split()
返回一个列表,如果字符串为空,返回一个空列表[]
。- 不修改原字符串:像其他字符串方法一样,
split()
不会修改原始字符串,它返回一个新的列表。
方法二:双指针
class Solution:
def reverseWords(self, s: str) -> str:
# s =" hello world "
# 它会自动去除字符串两侧的空白并按空白字符进行分割,转换成列表类型。
# 注意,多个空格会被视为一个分隔符。
words = s.split() # s =["hello","world"]
# 反转单词
left, right = 0, len(words) - 1
while left < right:
words[left], words[right] = words[right], words[left]
left += 1
right -= 1
#words[left] 是 "hello",words[right] 是 "world"。
# ["world","hello"]
# 将列表转换成字符串
return " ".join(words) #world hello
方法三:
class Solution:
def reverseWords(self, s):
words = s.split() #type(words) --- list
words = words[::-1] # 反转单词
return ' '.join(words) #列表转换成字符串
右旋字符串 卡码网题目链接
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。
例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。
输入:输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。
输出:输出共一行,为进行了右旋转操作后的字符串。
#获取输入的数字k和字符串
k = int(input())
s = input()
#通过切片反转第一段和第二段字符串
#注意:python中字符串是不可变的,所以也需要额外空间
s = s[len(s)-k:] + s[:len(s)-k]
print(s)
切片操作:
切片的基本语法是:
s[start:end]
start
是开始索引(包含)。end
是结束索引(不包含)。- 如果省略
start
,默认从字符串的开头开始。- 如果省略
end
,默认到字符串的末尾结束。
生成新的字符串操作:
在 Python 中,字符串的不可变性意味着你不能直接修改字符串的内容,但你可以通过一些方式生成新的字符串。以下是一些常用的方法:
1. 切片
使用切片操作可以创建字符串的子字符串或反转字符串:
s = "hello"
reversed_s = s[::-1] # 反转字符串
print(reversed_s) # 输出: "olleh"
2. 字符串连接
你可以通过连接多个字符串来生成新的字符串:
s1 = "hello"
s2 = "world"
combined = s1 + " " + s2 # 连接字符串
print(combined) # 输出: "hello world"
3. 字符串方法
使用字符串的方法,如 replace()
, upper()
, lower()
等,都会返回一个新的字符串:
s = "Hello World"
new_s = s.upper() # 转换为大写
print(new_s) # 输出: "HELLO WORLD"
4. 格式化字符串
使用格式化方法生成新的字符串:
name = "Alice"
greeting = f"Hello, {name}!" # 使用 f-string 格式化
print(greeting) # 输出: "Hello, Alice!"
5. 列表推导式
如果需要对字符串中的每个字符进行操作,可以使用列表推导式,然后使用 join()
方法生成新的字符串:
s = "hello"
new_s = ''.join([char.upper() for char in s]) # 将每个字符转换为大写
print(new_s) # 输出: "HELLO"