LintCode 171. Anagrams

原题

LintCode 171. Anagrams

Description

Given an array of strings, return all groups of strings that are anagrams.

Notice

All inputs will be in lower-case

Example

Given ["lint", "intl", "inlt", "code"], return ["lint", "inlt", "intl"].

Given ["ab", "ba", "cd", "dc", "e"], return ["ab", "ba", "cd", "dc"].

解题

题意是在一组字符串中,找到所有出现两次及以上的乱序字符串。

思路是,实现一个映射,使得对于任意相同但乱序的字符串,映射后的值相同。
这里的实现是,将输入的字符串转为“字母+数字”的形式,其中数字为字母在字符串中出现的次数。例如“aabc”和“abca”的映射结果都是“a2b1c1”。

只需要遍历一次数组,然后将所有的字符串都进行一次映射,并将映射值相同的字符串放在同一个数组内。最后将所有大小超过1的数组组合起来即可。

代码

class Solution {
public:
    /*
    * @param strs: A list of strings
    * @return: A list of strings
    */
    vector<string> anagrams(vector<string> &strs) {
        // write your code here
        map<string, vector<string>> m;
        vector<string> res;
        for (auto &str : strs) {
            int alphabet[26] = { 0 };
            for (auto c : str) {
                alphabet[c - 'a']++;
            }
            string key;
            key.reserve(10);
            for (int i = 0; i < 26; i++) {
                if (alphabet[i]) {
                    key += char(i + 'a');
                    key += alphabet[i];
                }
            }
            auto it = m.find(key);
            if (it == m.end()) {
                m.insert({ key, vector<string>{str} });
            } else {
                it->second.push_back(str);
            }
        }
        for (auto &p : m) {
            if (p.second.size() > 1) {
                res.insert(res.end(), p.second.begin(), p.second.end());
            }
        }
        return res;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,120评论 19 139
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,357评论 0 33
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,831评论 0 4
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 11,207评论 0 4
  • 因为各种各样的原因,很多人买到了户型上采光率较低或者位于底层被旁边的高层挡住自然光的房子,造成室内昏暗,人住进去也...
    好屋家装阅读 12,101评论 0 0

友情链接更多精彩内容