前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode: Anagrams

LeetCode: Anagrams

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-25 14:46:44
4260
发布2019-01-25 14:46:44
举报

问题:

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

Note: All inputs will be in lower-case.

分析:

1.可使用map作为容器。

2.将字符串按字母顺序进排序后作为map的key,将具有相同key的字符串的集合作为map的value。

3.统计value集合不小于1的添加到结果数据集中。

示例代码:

代码语言:javascript
复制
class Solution 
{
    public:
    //将字符串按照字母顺序进排序,并返回排序后的新字符串(不改变原来字符串)
    string sort(string str)
    {
    	std::sort(str.begin(), str.end());
    	return str;
    }
    
    vector<string> anagrams(vector<string> &strs)
    {
    	vector<string> result;//结果数据集
        //如果给定的集合中字符串个数小于2则直接返回
    	if (strs.size() < 2)
    	{
    		return result;
    	}
        //用于排序过程的map集合,key为按字母顺序排列的字符串,value为字符串在原来vector中的位置
    	map<string, vector<int>> anagramsMap;
    	string key;
    	string value;
    	int size = strs.size(); 
    	for (int i = 0; i < size; i++)
    	{
    		value = strs[i];
    		key = sort(value);
                //如果map中不存在给定的key,则新添加一个pair
    		if (anagramsMap.find(key) == anagramsMap.end())
    		{
    			vector<int> anagrams(1, i);
    			anagramsMap.insert(std::make_pair(key, anagrams));
    		} 
                //否则,在key对应的value中添加字符串所在位置
    		else
    		{
    			anagramsMap[key].push_back(i);
    
    		}
    	}
    
        //遍历map将value集合大于1的都放到result结果数据集中
    	for (map<string, vector<int>>::iterator iter = anagramsMap.begin(); iter != anagramsMap.end(); iter++)
    	{
    		vector<int> anagrams = iter->second;
    		int size = anagrams.size();
    		if (size > 1)
    		{
    			for (int i = 0; i < size; i++)
    			{
    				result.push_back(strs[anagrams[i]]);
    			}
    		}
    	}
    	return result;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年11月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档