leetcode之Anagrams

原題如下:

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

不得不說,這道題的題意太模糊了,首先簡單介紹一下Anagram(迴文構詞法)。Anagrams是指由顛倒字母順序組成的單詞,比如“dormitory”顛倒字母順序會變成“dirtyroom”,“tea”會變成“eat”。

迴文構詞法有一個特點:單詞裏的字母的種類和數目沒有改變,只是改變了字母的排列順序。

思路:在對字符串比較之前進行排序是必須的,也就是將排序後的串作爲模式串存入map中,然後根據排序後是否相等判斷是否是迴文串,這裏需要注意的一個問題是模式串的處理:只有遇到相同的串時才能將模式串存入結果向量中,而在以後的判斷中只需加入待比較的串,所以需要通過改變模式串的下標值來標記其是否已被加入。

class Solution {
public:
    vector<string> anagrams(vector<string> &strs) {
		vector<string>v;
		map<string,int>mp;
		if(strs.size() <= 1)
			return v;
		for(int i = 0; i < strs.size(); i++){
			string s = strs[i];
			sort(s.begin(),s.end());
			if(mp.find(s) == mp.end()){
			    mp[s] = i;
			}
			else{
			    if(mp[s] >= 0){
					v.push_back(strs[mp[s]]);
					mp[s] = -1;
				}
				v.push_back(strs[i]);
			}
		}
		return v;

    }
	
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章