题目描述:
题解:
第一版:
1.利用两个循环依次比较输入strs中的字符串strs[i] strs[j]
2.在比较strs[i] strs[j]的时候,对strs[i]的每个字符,判断strs[j]中是否存在
3.需要注意每结束一次比较,如果在strs[j]找到对应的字符,将该位置replace位空,防止多次匹配同一位置的字符,同时将replace最大次数设为1,防止将所有相同字符修改为空。
结果:在最后一个测试样例超时
def groupAnagrams(self,strs): final_list = [] group = [] strs_flag = [] for i in range(len(strs)): strs_flag.append(0) for i in range(len(strs)): if strs_flag[i]==0: group.append(strs[i]) for j in range(i+1,len(strs)): if strs_flag[i]==0 and strs_flag[j]==0: str1 = strs[i] str2 = strs[j] if len(str1)==len(str2): flag = 0 for k in range(len(str1)): pos = str2.find(str1[k]) if pos!=-1: str2 = str2.replace(str2[pos],' ',1) flag = flag+1 if flag==len(str1): group.append(strs[j]) strs_flag[j]=-1 strs_flag[i]=-1 final_list.append(group) group = [] return final_list
第二版:
参考:https://blog.csdn.net/qq_17550379/article/details/80633737
1.将strs中的每个字符串排序。 2.将具有相同字母组成的字符串映射到同一位置 2.采用dict mapped_pos记录每组字符串及对应的位置 def groupAnagrams(self, strs): mapped_pos = {} result = [] str_num = len(strs) for i in range(str_num): sorted_str = str(sorted(strs[i])) print(type(sorted_str)) if sorted_str in mapped_pos: pos = mapped_pos[sorted_str] result[pos].append(strs[i]) else: mapped_pos[sorted_str] = len(result) result.append([strs[i]]) return result