leetcode第一刷_Anagrams

來源:互聯網
上載者:User

今天再看這個題時,死活想不起這個單詞是什麼意思,查了字典都不知道,真暈了。

這個單詞直譯是顛倒順序所形成的單詞,實際上就是從集合中找出所有是由一組字母形成的那些單詞,這種可以由很多組,即只要這組字母形成的字典中的單詞多於1個,就要把這些單詞輸出出來。

怎麼做呢?思路還是很簡單的,要找出是由一組字母形成的單詞,顯然應該知道每一個單詞是由哪些字母形成的,這當然可以建一個hash表,每次都比對hash表中的每一個位置的個數是不是相等,有沒有更好的辦法呢?有的,就是把這個hash錶轉化成一個string,這樣看看string是不是相等的。那怎麼轉化呢?我用的方式是stringstream,這個流大家不是很熟悉,但是我發現它幾乎是string與int之間轉化最方便的工具了,可以把int餵給它,然後讓他吐出string,好神奇。每個單詞都可以計算這樣一個string形式的hash表,把這個string作為map中的鍵,然後相同的那些單詞可以放入對應的value,輸出的時候,看一下後面value的size,大於1就輸出出來,是不是很粗暴。

用這種方法一開始逾時了,後來才發現是轉化hash表的那裡,修改了一下就好了,這種寫法應該比較有適應性,注意每一個字母的個數之間最後插入一個特殊字元,防止連在一起產生錯誤。

string changeToString(int* t){    ostringstream ss;    for(int i=0;i<26;i++){        ss<<t[i]<<"-";    }    return ss.str();}class Solution {public:    vector<string> anagrams(vector<string> &strs) {        vector<string> res;        int len = strs.size();        if(len<=1)            return res;        map<string, vector<int> > smap;        int t[30];        for(int i=0;i<len;i++){            memset(t, 0, sizeof(t));            for(int j=0;j<strs[i].length();j++){                t[strs[i][j]-'a']++;            }            smap[changeToString(t)].push_back(i);        }        map<string, vector<int> >::const_iterator it = smap.begin();        while(it != smap.end()){            int tplen = (it->second).size();            if(tplen>1){                for(int i=0;i<tplen;i++)                    res.push_back(strs[(it->second)[i]]);            }            it++;        }        return res;    }};


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.