【发布时间】:2017-08-25 05:16:06
【问题描述】:
假设我有一个字符串,例如
s = "左-左-右-右-左"
和一个空字符串 n = ''
从左到右读取该字符串,读取出现的左右数量,并为每个左边添加一个“a”,为每个出现的右边添加一个“b”。
换句话说,像
这样的函数def convert(s):
会返回'aabba'
我正在考虑 s.count 的思路,但是 b 需要在 a 之间,并且 count 不会告诉您子字符串发生的位置。
【问题讨论】:
假设我有一个字符串,例如
s = "左-左-右-右-左"
和一个空字符串 n = ''
从左到右读取该字符串,读取出现的左右数量,并为每个左边添加一个“a”,为每个出现的右边添加一个“b”。
换句话说,像
这样的函数def convert(s):
会返回'aabba'
我正在考虑 s.count 的思路,但是 b 需要在 a 之间,并且 count 不会告诉您子字符串发生的位置。
【问题讨论】:
最简单的方法是用a替换left,用b替换right。它应该工作
s = "left-left-right-right-left"
s = s.replace("left","a")
s=s.replace("right","b")
s=s.replace("-","")
【讨论】:
最简单的解决方案。
def convert(s):
s = s.replace("left", "a")
s = s.replace("right", "b")
s = s.replace("-", "")
return s
或
def convert(s):
return s.replace("left", "a").replace("right", "b").replace("-", "")
【讨论】:
我尝试了递归解决方案。
def rec_search(s, n):
if len(s) is 0:
return n
if s[-len('left'):] == 'left':
return rec_search(s[:-len('-left')], n) + 'a'
return rec_search(s[:-len('-right')], n) + 'b'
print rec_search('left-left-right-right-left', '')
【讨论】:
这也可以使用正则表达式sub() 来完成,如下所示:
import re
s = "left-left-right-right-left"
print re.sub('left|right|-', lambda x: {'left':'a', 'right':'b', '-':''}[x.group(0)], s)
给你:
aabba
它的工作原理是将任何 left right 或 | 替换为在字典中查找替换文本的函数。
【讨论】: