当前位置: 首页 > news >正文

(LeetCode 49)Anagrams

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

Note: All inputs will be in lower-case.

题目:

给一组字符串,返回所有满足Anagrams(回文构词法)的字符串;

Anagrams是指由颠倒字母顺序组成的单词,比如“dormitory”颠倒字母顺序会变成“dirty room”,“tea”会变成“eat”。

回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。

思路:

满足Anagrams的字符串中的字符种类和数目都一样,如果对字符串排序,那么他们必定是相等,于是可以想到通过Hash表来判断该字符串是否出现过,如果出现过,即满足Anagrams;

需要考虑的是出现三个或三个以上的判断条件,这时数组式的hash表已无法满足,因此可以采用map<string,int>,通过key-value的形式来记录;

当string没有出现过,则对应的value为字符串数组的下表i,即map[string]=i;

当string已出现过一次,则对应的value可以设为-1,并输出该对应的字符串,即map[string]=-1;

当string出现过一次以上,即map[string]==-1,则直接输出该s对应的字符串;

代码:

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

转载于:https://www.cnblogs.com/AndyJee/p/4693836.html

相关文章:

  • Linux压缩指令
  • havok之thread和memory system
  • 【后缀自动机】ZOJ3891、HDU5343
  • linux下一个C语言要求CPU采用
  • how hard to say goodbye to you
  • [hdu4622 Reincarnation]后缀数组
  • I学霸官方免费教程三十二:Java集合框架之Set集合
  • Spark RDD Operations(1)
  • XE3随笔7:可以省略的双引号
  • Cocos2d-x 2.3.3版本 FlappyBird
  • LeetCode Implement Stack using Queues
  • Web前端学习-第六课HTML篇
  • C# 跨线程呼叫控制
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • Unity3d之流光效果
  • Angular 2 DI - IoC DI - 1
  • AngularJS指令开发(1)——参数详解
  • css布局,左右固定中间自适应实现
  • Linux快速复制或删除大量小文件
  • PAT A1017 优先队列
  • tweak 支持第三方库
  • XForms - 更强大的Form
  • 安装python包到指定虚拟环境
  • 二维平面内的碰撞检测【一】
  • 批量截取pdf文件
  • 巧用 TypeScript (一)
  • 区块链分支循环
  • 区块链技术特点之去中心化特性
  • 如何在 Tornado 中实现 Middleware
  • 入手阿里云新服务器的部署NODE
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 思考 CSS 架构
  • 学习HTTP相关知识笔记
  • # 安徽锐锋科技IDMS系统简介
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (7)STL算法之交换赋值
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (分类)KNN算法- 参数调优
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (六)软件测试分工
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)程序员技术练级攻略
  • .bat批处理出现中文乱码的情况
  • .htaccess 强制https 单独排除某个目录
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net 生成二级域名
  • .net 微服务 服务保护 自动重试 Polly
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET处理HTTP请求
  • .net反编译的九款神器
  • .net后端程序发布到nignx上,通过nginx访问
  • .NET框架设计—常被忽视的C#设计技巧