获得交换两个相邻字母的字符串的所有可能变体的最优雅的方法是什么?例如,如果我们有字符串
'stack'
,则所需的结果应该是:
['tsack', 'satck', 'stcak', 'stakc']
我的解决方案:
w = 'stack'
[w[:i-1] + w[i] + w[i-1] + w[i+1:] for i in range(1, len(w))]
def switch_letter(word, verbose=False): ''' 输入: 单词:输入字符串 输出: 开关:所有可能的字符串的列表,其中一个相邻字符已切换 '''
switch_l = []
split_l = []
### START CODE HERE ###
split_l = [ (word[:i], word[i:]) for i in range(len(word)+1) ]
switch_l = [ L +R[1]+R[0]+R[2:] for L,R in split_l if len(R)>1 ]
### END CODE HERE ###
if verbose: print(f"Input word = {word} \nsplit_l = {split_l} \nswitch_l = {switch_l}")
return switch_l
switch_word_l = switch_letter(word="stack",
verbose=True)
输出:输入word = stack split_l = [('', 'stack'), ('s', 'tack'), ('st', 'ack'), ('sta', 'ck'), ('stac', 'k'), ('stack', '')] switch_l = ['tsack', 'satck', 'stcak', 'stakc']