LeetCode: Anagrams

原创 2012年03月21日 13:25:25

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

Note: All inputs will be in lower-case.

#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace::std;
class Solution {
public:
	long RSHash(string str)
	{
		int a = 378551;
		int b = 63689;
		long hash = 0;
		for(int i = 0; i < str.size(); i++)
		{
			hash = hash * a + str[i];
			a = a * b;
		}
		return hash;
	}
    vector<string> anagrams(vector<string> &strs) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
		vector<string> copy(strs);
		vector<string> result;
		map<long, vector<int> > mymap;
		long key = 0;
		for(size_t i = 0; i < strs.size(); i++)
		{
			sort(strs[i].begin(), strs[i].end());
		}
		
		for(size_t i = 0; i < strs.size(); i++)
		{
			//mymap[strs[i]].push_back(i);
			mymap[RSHash(strs[i])].push_back(i);
		}
		
		
		for(size_t i = 0; i < strs.size(); i++)
		{
			if(mymap[RSHash(strs[i])].size() > 1)
			while(mymap[RSHash(strs[i])].size() > 0)
			{
				result.push_back(copy[mymap[RSHash(strs[i])].back()]);
				mymap[RSHash(strs[i])].pop_back();
			}

		}
		
		return result;
        
    }
};
int main()
{
	vector<string> aa;
	
	aa.push_back("tea");
	aa.push_back("ate");
	aa.push_back("eta");

	
	Solution ss;
	ss.anagrams(aa);
//	int a;
//	cout<<a<<endl;
//	ss.print(ss.threeSum(aa));
}

知识点:

找出一个vector<string>中所有重复元素的位置, 先建立一个map<long,vector<int> >, 再将string通过hash 转换为 long

之后

for(int i = 0; i < size; i++)

 map[hashvalue].push_back(i);

另外马哥说要复习各种时间复杂度的hash算法


Round 2:

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


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【LeetCode】49. Group Anagrams

【LeetCode】49. Group Anagrams

Leetcode Find All Anagrams in a String

题意:找到字符串中所有可以重排列得到目标串的字串位置。 思路:记录目标串中各字母出现的次数,枚举字符串中每一个字母。 class Solution { public: Solution(...

leetcode 49. Group Anagrams(哈希,字典序)

题目大意:把一个字符串数组按字母组成的不同分到几个字符串数组,把每个字符串数组按字典序排序 解题方法:先用HashMap类对字符串数组哈希,再把每个字符串数组进行字典序排序 要      点: ...

LeetCode 49. Group Anagrams(分组同构异形词)

原题网址:https://leetcode.com/problems/anagrams/ Given an array of strings, group anagrams together. ...

LeetCode | 49. Group Anagrams

Given an array of strings, group anagrams together.For example, given: ["eat", "tea", "tan", "ate", ...

Leetcode 49. Group Anagrams & 242. Valid Anagram

49. Group Anagrams Given an array of strings, group anagrams together. For example, gi...

LeetCode Group Anagrams

题目: Given an array of strings, group anagrams together. For example, given: ["eat", "tea", "tan"...

leetcode题解-49. Group Anagrams

题目:Given an array of strings, group anagrams together.For example, given: [“eat”, “tea”, “tan”, “ate...

LeetCode OJ-49.Group Anagrams

LeetCode OJ-49.Group Anagrams题目描述 Given an array of strings, group anagrams together. For exa...

Anagrams--LeetCode

题目: Given an array of strings, return all groups of strings that are anagrams. Note: All inputs w...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)