LeetCode 面试题 10.02. 变位词组

文章目录

一、题目

  编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。

  注意:本题相对原题稍作修改

示例:

输入: "eat", "tea", "tan", "ate", "nat", "bat",
输出:

\["ate","eat","tea"\], \["nat","tan"\], \["bat"

]

说明:

  • 所有输入均为小写字母。
  • 不考虑答案输出的顺序。

  点击此处跳转题目。

二、C# 题解

  分为三个步骤:

  1. 将同一排列的字符串 s 转换为唯一标识 key;
  2. 使用字典将同一 key 的 s 记录在同一组;
  3. 字典结果转化为列表。
csharp 复制代码
public class Solution {
    public int[]         Record = new int[26];         // 记录字符串 s 每个字符出现的次数
    public StringBuilder Sb     = new StringBuilder(); // 用于将 Record 转化为对应字符串

    public IList<IList<string>> GroupAnagrams(string[] strs) {
        Dictionary<string, IList<string>> dic = new Dictionary<string, IList<string>>();

        foreach (string str in strs) {
            string key = GetKey(str);                    // 获取唯一标识
            if (dic.ContainsKey(key)) dic[key].Add(str); // 判断字典中是否存在
            else dic[key] = new List<string> { str };
        }

        return new List<IList<string>>(dic.Values); // 结果转换
    }

    // 获取字符串 s 对应排列的唯一标识
    public string GetKey(string s) {
        // 清空缓存
        for (var i = 0; i < Record.Length; i++) { Record[i] = 0; }
        Sb.Clear();

        foreach (char t in s) { Record[t - 'a']++; }      // 统计 s 中每个字符出现的次数
        foreach (int t in Record) { Sb.Append('-' + t); } // 转化为对应字符串,添加 '-' 以消除歧义性
        return Sb.ToString();
    }
}
csharp 复制代码
foreach (int t in Record) { Sb.Append('-' + t); } // 转化为对应字符串,添加 '-' 以消除歧义性

  这句话中多添加 '-' 是避免后续字符的统计次数影响到当前字符。例如:对于字符 '121' 可以表示为如下两种情况:

  1. '1-21':a 统计了 1 次,b 统计了 21 次;
  2. '12-1':a 统计了 12 次,b 统计了 1 次。

  • 时间:164 ms,击败 100.00% 使用 C# 的用户
  • 内存:64.09 MB,击败 80.00% 使用 C# 的用户
相关推荐
郝学胜-神的一滴1 小时前
游戏设计:原型与开发 19:U3D工位布置与性格说明书
人工智能·算法·unity·unreal engine·游戏策划·游戏设计
椒颜皮皮虾྅2 小时前
一套 C# 接口,解锁四类视觉任务:DeploySharp 分类、分割、关键点与旋转框实战
开发语言·分类·c#
罗迪尼亚的熔岩2 小时前
联合kuka机器人, 海康visonmaster 的手眼9点标定方法
机器人·c#·工业相机·标定
hahaha60162 小时前
数字图像时域滤波或者3D降噪算法FPGA实现
算法·计算机视觉·fpga开发
文丑颜不良啊2 小时前
LeetCode1541~1560题目解析
java·leetcode
她说彩礼65万2 小时前
C# TaskCompletionSource
java·开发语言·c#
YSL0701242 小时前
一文通关-----树和二叉树
数据结构·算法
青少儿编程课堂2 小时前
蓝桥杯青少组图形化+信息素养+电子学会Scratch考级:校园口算闯关解析
c++·python·算法·bfs·信息学竞赛
computersciencer2 小时前
应用贝叶斯公式:迟到了,那坐的是哪种交通工具呢?
算法·机器学习·概率论
若亦_2 小时前
排序>>交换排序
java·数据结构·算法