记录一个面试题
python面试题:
对字符串s进行切分,保证每一个切片尽量短,且当前切片字母在后续的s中没有出现
s
和切分结果举例如下:
s = "ababcbacannmnsspppddefegdehijhklij"
>>>
['ababcbaca', 'nnmn', 'ss', 'ppp', 'ddefegde', 'hijhklij']
from collections import Counter
def foo(s):
out_list = []
s_chars = Counter(s)
a_part = ''
a_part_chars = set()
for i in range(len(s)):
s_chars[s[i]] -= 1
if s_chars[s[i]]==0:
s_chars.pop(s[i])
if s[i] in s[i+1:] or a_part_chars & set(s_chars):
a_part = a_part + s[i]
a_part_chars.add(s[i])
else:
a_part+=s[i]
out_list.append(a_part)
a_part = ''
# a_part_chars = set()
# 这里可有可无前面已经判断了已经进入到out_list的字母不会在后面的s中
# 所以这里不重置也不会影响后续a_part的判断
return [x for x in out_list]
s = "ababcbacannmnsspppddefegdehijhklij"
print(foo(s))
['ababcbaca', 'nnmn', 'ss', 'ppp', 'ddefegde', 'hijhklij']