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"].

解題

題意是在一組字符串中,找到所有出現(xiàn)兩次及以上的亂序字符串。

思路是,實(shí)現(xiàn)一個(gè)映射,使得對(duì)于任意相同但亂序的字符串,映射后的值相同。
這里的實(shí)現(xiàn)是,將輸入的字符串轉(zhuǎn)為“字母+數(shù)字”的形式,其中數(shù)字為字母在字符串中出現(xiàn)的次數(shù)。例如“aabc”和“abca”的映射結(jié)果都是“a2b1c1”。

只需要遍歷一次數(shù)組,然后將所有的字符串都進(jìn)行一次映射,并將映射值相同的字符串放在同一個(gè)數(shù)組內(nèi)。最后將所有大小超過(guò)1的數(shù)組組合起來(lái)即可。

代碼

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;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,890評(píng)論 0 33
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,667評(píng)論 0 4
  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的...
    笨鳥(niǎo)慢飛閱讀 6,220評(píng)論 0 4
  • 因?yàn)楦鞣N各樣的原因,很多人買(mǎi)到了戶型上采光率較低或者位于底層被旁邊的高層擋住自然光的房子,造成室內(nèi)昏暗,人住進(jìn)去也...
    好屋家裝閱讀 7,475評(píng)論 0 0

友情鏈接更多精彩內(nèi)容