首页 > 编程语言 >排序算法练习——按照字符串的异位词分组:给定一个字符串数组,将所有异位词(字符相同但顺序不同的字符串)分组到同一个组中

排序算法练习——按照字符串的异位词分组:给定一个字符串数组,将所有异位词(字符相同但顺序不同的字符串)分组到同一个组中

时间:2024-03-25 18:02:49浏览次数:31  
标签:anagrams strs 异位 分组 字符串 排序

按照字符串的异位词分组:给定一个字符串数组,将所有异位词(字符相同但顺序不同的字符串)分组到同一个组中。

要按照字符串的异位词分组,可以使用哈希表来将每个字符串排序后作为键,相同键的字符串即为异位词。以下是实现这个算法的Python代码:

from collections import defaultdict

def group_anagrams(strs):
    anagrams_map = defaultdict(list)
    
    for s in strs:
        # 将字符串排序后作为键,相同键的字符串即为异位词
        sorted_s = ''.join(sorted(s))
        anagrams_map[sorted_s].append(s)
    
    return list(anagrams_map.values())

# 示例字符串数组
strs = ["eat", "tea", "tan", "ate", "nat", "bat"]

# 分组异位词
grouped_anagrams = group_anagrams(strs)
print("Groups of anagrams:", grouped_anagrams)

在上面的代码中,我们使用defaultdict创建了一个默认值为列表的哈希表anagrams_map,然后遍历字符串数组strs,对每个字符串进行排序,并将排序后的字符串作为键,原始字符串作为值,加入到哈希表中。最后返回哈希表中的值,即分组后的异位词列表。

这个算法的时间复杂度为O(n * k * logk),其中n是字符串数组的长度,k是字符串的平均长度,因为需要对每个字符串进行排序。

标签:anagrams,strs,异位,分组,字符串,排序
From: https://blog.csdn.net/SmiledrinkCat/article/details/136771390

相关文章

  • 06天【代码随想录算法训练营34期】 第三章 哈希表part01(● 242.有效的字母异位词 ●
    242.有效的字母异位词思路:26位的array,每个分别对应a,b,c...,z,如果遇到一个字母就++,如果两个array一样则为anagramhint:toinitiateanarraywithnelementscarryingvalue0:arr=[]arr=[0foriinrange(n)]print(arr)classSolution:defisAnagram(self,......
  • 华为OD机试C++ - 游戏分组
    游戏分组前言:本专栏将持续更新互联网大厂机试真题,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于大厂机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:[email protected];备注:CSDN。题目描述部门准备举办一场王者......
  • 截取适合数据库长度的字符串
    importjava.nio.charset.StandardCharsets;publicclassTools{publicstaticvoidmain(String[]args){System.out.println(splitString("[计算费用应judnsdjwddqwhwqdwdqhwdqhwqhqwihq就得花洒uhuqwduhqwudquwhuqdwuhdqwqdw请重新计算;",128));}......
  • 【C语言】字符函数和字符串函数
    前言:在编程的过程中,我们经常要处理字符和字符串,C语言标准库中提供了一系列库函数,接下来我们一起学习一下这些函数。1.字符分类函数C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含⼀个头⽂件是ctype.hiscntrl......
  • 代码随想录算法训练营第五十五天 | 583. 两个字符串的删除操作, 72. 编辑距离
    72.编辑距离 已解答中等 相关标签相关企业 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符 示例1:输入:word1="horse"......
  • 代码随想录算法训练营Day55 ||leetCode 583. 两个字符串的删除操作 || 72. 编辑距离
    583. 两个字符串的删除操作 这道题的状态方程比上一题简单一些初始化如下classSolution{public:intminDistance(stringword1,stringword2){vector<vector<int>>dp(word1.size()+1,vector<int>(word2.size()+1));for(inti=0;i......
  • Offer必备算法16_字符串_四道力扣题详解(由易到难)
    目录①力扣14.最长公共前缀解析代码1(两两比较)解析代码2(统一比较)②力扣5.最长回文子串解析代码(中心拓展)③力扣67.二进制求和解析代码④力扣43.字符串相乘解析代码(无进位相乘)本篇完。①力扣14.最长公共前缀14.最长公共前缀难度简单编写一个函数来查找字符......
  • 第十篇:MySQL内置函数(字符串函数|数值函数|日期函数|流程函数)
    函数就是一段写好的、具有特定功能的代码,可以被另一段程序直接调用,只要拥有编程基础。想必对函数并不陌生本篇将系统性地记录MySQL中常用的内置函数,主要分为这四大类,字符串函数数值函数日期函数流程函数一,字符串函数(一)concat(S1,S2,...Sn)<-拼接作用描述将传入......
  • 如何处理多个字符串拼接出最大最小结果问题
    如题,给出若干个字符串输出字符串拼接成的最小的结果则我们应当对其进行排序,排序的规则是,如果总共字符串为s1,s2,s3.且如果是s1+s2大于s2+s1则应该将s2排在s1的前面,来使得最终拼接成的总字符串最小。排列后为s2,s1,s3.如果s1+s3>s3+s1的话将s3排在s1的前面。然后再进行s2与s3的......
  • 每日一练:LeeCode-38、外观数列【字符串】
    给定一个正整数n,输出外观数列的第n项。「外观数列」是一个整数序列,从数字1开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1)="1"countAndSay(n)是对countAndSay(n-1)的描述,然后转换成另一个数字字符串。......