leetcode2788

题目

Leetcode 2788

按分隔符拆分字符串
  • 给你一个字符串数组 words 和一个字符 separator ,请你按 separator 拆分 words 中的每个字符串。
  • 返回一个由拆分后的新字符串组成的字符串数组,不包括空字符串 。
  • 注意
    • separator 用于决定拆分发生的位置,但它不包含在结果字符串中。
    • 拆分可能形成两个以上的字符串。
      结果字符串必须保持初始相同的先后顺序。

提示

  1. 1 <= words.length <= 100
  2. 1 <= words[i].length <= 20
    words[i] 中的字符要么是小写英文字母,要么就是字符串 “.,|$#@” 中的字符(不包括引号)
  3. separator 是字符串 “.,|$#@” 中的某个字符(不包括引号)

先来看看原始解答:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def splitWordsBySeparator(self, words: List[str], separator: str) -> List[str]:
ans = []
for word in words:
self.splitWordUnit(word, separator, ans)
return ans
def splitWordUnit(self, word: str, separator: str, ans: List[str]):
tmp = ""
for ch in word:
if ch != separator:
tmp += ch
elif tmp != '':
ans.append(tmp)
tmp = ''
if tmp != '':
ans.append(tmp)

下面我们用列表解析和字符串的joinsplit方法优化我们的题解:

join方法

在Python中,join() 是用于将列表或其他可迭代对象的元素连接成一个字符串的方法。它是一个字符串方法,可以在一个分隔符字符串的帮助下将元素连接起来。

join() 方法的语法如下:

1
字符串分隔符.join(可迭代对象)

其中,字符串分隔符 是一个用于将元素连接起来的字符串,而可迭代对象 是一个包含要连接的元素的列表、元组等。请注意,可迭代对象中的元素必须都是字符串类型。

下面是一个使用`join()` 方法的示例:
1
2
3
my_list = ['Hello', 'World', 'Python']
result = '-'.join(my_list)
print(result)

输出结果是:

1
Hello-World-Python

在上面的示例中,join() 方法将my_list列表中的三个元素连接成一个新的字符串,并使用指定的分隔符'-'进行分隔。

split方法

在Python中,split() 是用于将字符串分割成子字符串的方法。它可以根据指定的分隔符将一个字符串分割成多个部分,并返回一个包含所有子字符串的列表。

split() 方法的语法如下:

1
字符串.split(分隔符, 最大分割次数)

其中,字符串 是要分割的字符串,分隔符 是用于确定分割位置的字符串,最大分割次数 是可选参数,用于指定最大的分割次数。如果未指定最大分割次数,则会将字符串全部分割。

下面是一个使用`split()` 方法的示例:
1
2
3
my_string = "Hello-World-Python"
result = my_string.split('-')
print(result)

输出结果是:

1
['Hello', 'World', 'Python']

在上面的示例中,split() 方法根据指定的分隔符'-'将字符串my_string分割成三个部分,并返回一个包含这三个子字符串的列表。

另外,还可以使用maxsplit参数来限制分割次数。例如:

1
2
3
my_string = "apple,banana,orange,grape"
result = my_string.split(',', 2)
print(result)

输出结果是:

1
['apple', 'banana', 'orange,grape']

在这个示例中,maxsplit参数为2,所以split()方法最多只会分割出两个子字符串。

列表解析

列表解析是一种简洁且强大的方式,用于根据现有列表创建新的列表。它是 Python 提供的一种快速生成列表的方法。

列表解析的基本语法如下:

1
[表达式 for 变量 in 可迭代对象 if 条件]

其中,表达式 是对变量的处理方法,变量 是用于遍历可迭代对象的变量名,可迭代对象 是需要遍历的列表、元组、字符串等,条件 是一个可选项,用于筛选出满足条件的元素。

下面是一个使用列表解析的示例:
1
2
3
numbers = [1, 2, 3, 4, 5]
squared_numbers = [x**2 for x in numbers]
print(squared_numbers)

输出结果是:

1
[1, 4, 9, 16, 25]

在上面的示例中,squared_numbers 是通过对 numbers 列表中的每个元素进行平方运算得到的新列表。列表解析中的表达式 x**2 定义了每个元素的处理方法,x 是遍历 numbers 列表时的变量。

你还可以在列表解析中添加条件来筛选元素。例如,获取列表中所有的偶数:

1
2
3
numbers = [1, 2, 3, 4, 5]
even_numbers = [x for x in numbers if x % 2 == 0]
print(even_numbers)

输出结果是:

1
[2, 4]

在上面的示例中,通过添加条件 x % 2 == 0,只有当元素是偶数时,才会被包含在新列表 even_numbers 中。

请注意,添加条件是不能带有else的。

列表解析还可以嵌套使用,用于处理多维数据。这使得可以更加灵活地生成复杂的数据结构。

总之,列表解析是一种简洁而强大的方式,用于根据现有列表以及一些条件创建新的列表。它是 Python 中优雅而高效的一种编程技巧。

题解

最终的题解可以用一行解决:

1
2
3
class Solution:
def splitWordsBySeparator(self, words: List[str], separator: str) -> List[str]:
return [x for x in separator.join(words).split(separator) if x != '']<u></u>