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# 的用户
相关推荐
pianmian119 分钟前
python数据结构基础(7)
数据结构·算法
考试宝2 小时前
国家宠物美容师职业技能等级评价(高级)理论考试题
经验分享·笔记·职场和发展·学习方法·业界资讯·宠物
好奇龙猫2 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20243 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
香菜大丸3 小时前
链表的归并排序
数据结构·算法·链表
jrrz08283 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time4 小时前
golang学习2
算法
面试鸭4 小时前
离谱!买个人信息买到网安公司头上???
java·开发语言·职场和发展
南宫生4 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法