这个题目是昨天偶然又看到,考虑把它实现一下。
要求实现的结果如下:
给定字符串"abcabcbb",结果是长度为3的"abc";
给定字符串"bbbbb",结果是长度为1的"b";
给定字符串"pwwkew",结果是长度为3的"wke"。注意一点:结果一定是子字符串,比如"pwke"是由子字符串拼接的字符串,不是子字符串。
要求已经给的很明确,也很容易理解,下面给您奉上小主的手稿:
1 from collections import Counter 2 3 4 def search_max_len_substring(string): 5 """ 6 给定一个字符串,查找最长子字符串(没有重复字符)的长度。 7 :param string: 8 :return: 最长子字符串,最长子字符串的长度 9 """ 10 no_repeat_strings = [] 11 start_index = 0 12 end_index = 1 13 14 if not string: 15 print('空字符串') 16 return None, None 17 else: 18 while end_index <= len(string): 19 tmp_str = string[start_index : ] if end_index == len(string) else string[start_index : end_index] 20 counter_dict = Counter(tmp_str) 21 if 2 in list(counter_dict.values()): # 有重复字符 22 start_index += 1 23 else: # 没有重复字符 24 no_repeat_strings.append([tmp_str, len(tmp_str)]) # 保存没有重复字符的字符串 25 end_index += 1 26 27 no_repeat_strings.sort(key=lambda item: item[1], reverse=True) # 降序排列 28 target_str, target_str_len= no_repeat_strings[0][0], no_repeat_strings[0][1] 29 return target_str, target_str_len
函数多返回了一个值,即子字符串的长度。
(有不对的地方,您多多指正,大家互相学习)