我有一个字符串需要根据sort_fmt
排序。例如:如果字符串是'abdcdfs'& sort_fmt是'dacg'。排序后,输出应该是'ddacfbs'。如您所见,输入字符串中可能存在不存在于订单字符串中的字符,反之亦然。输入字符串中没有出现在命令字符串中的字符应以任何顺序出现在输出字符串的末尾。String根据某种格式排序
这是我写的。它的工作原理是O(n * m)算法。我想知道是不是有更好的方法来做到这一点?也许使用itertools
?
def sort_str(s, sort_fmt):
sorted_str = ''
str_hash = dict()
# O(n)
for ch in s:
if ch in str_hash:
str_hash[ch] += 1
else:
str_hash[ch] = 1
# O(m) + O(1) where m<=n
for ch in sort_fmt:
if ch in str_hash:
cnt = str_hash[ch]
sorted_str += cnt * ch
# O(n)
for ch in s:
if ch not in sort_fmt:
sorted_str += ch
return sorted_str
if __name__ == '__main__':
print sort_str('abdcdfs', 'dacg')
O(n)sort?你确定吗? – 2010-12-19 10:15:57