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】Anagrams 解题报告

【题目】 Given an array of strings, return all groups of strings that are anagrams. Note: All in...
  • ljiabin
  • ljiabin
  • 2014年12月02日 09:41
  • 2073

2016蓝桥杯算法训练——Anagrams问题

算法训练   Anagrams问题 问题描述   Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Uncl...
  • qq_21385857
  • qq_21385857
  • 2016年03月16日 20:01
  • 1079

LeetCode OJ 之 Anagrams (回文构词法)

题目: Given an array of strings, return all groups of strings that are anagrams.(给定一组字符串,返回符合回文构词...
  • u012243115
  • u012243115
  • 2014年12月06日 20:11
  • 402

和大神们学习每天一题(leetcode)-Anagrams

Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will ...
  • majunyangyang
  • majunyangyang
  • 2014年12月24日 16:48
  • 207

1501101124-蓝桥杯-算法训练 Anagrams问题

算法训练 Anagrams问题   时间限制:1.0s   内存限制:512.0MB      问题描述   Anagrams指的是具有如下特性的两个单词:在这两个单词...
  • wangluoershixiong
  • wangluoershixiong
  • 2015年01月10日 11:18
  • 1292

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

原题网址:https://leetcode.com/problems/anagrams/ Given an array of strings, group anagrams together. ...
  • jmspan
  • jmspan
  • 2016年05月21日 06:11
  • 623

LeetCode OJ算法题(四十八):Anagrams

题目: Given an array of strings, return all groups of strings that are anagrams. Note: All inp...
  • op_yu
  • op_yu
  • 2014年08月06日 20:09
  • 223

【LeetCode-面试算法经典-Java实现】【所有题目目录索引】

【博文总目录>>>】 LeetCode算法题典   LeetCode是一个准备面试非常有用的网站,是非常值得去的地方,里面都是一些经典的面试题,这些题目在Google,Microsof...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月16日 06:27
  • 24547

LeetCode 问题汇总(算法,难度,频率)

Id Question Difficulty Frequency Data Structures Algorithms 1 T...
  • sbitswc
  • sbitswc
  • 2014年03月13日 11:58
  • 12081

UVA 156-Ananagrams(字符串排序按序输出无重复单词)

Ananagrams Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status ...
  • u013486414
  • u013486414
  • 2015年01月03日 15:46
  • 722
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode: Anagrams
举报原因:
原因补充:

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