美文网首页LintCode解题思路
Lintcode-乱序字符串

Lintcode-乱序字符串

作者: 爱秋刀鱼的猫 | 来源:发表于2017-02-20 19:48 被阅读15次

问题描述如下:
给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。


image.png

问题分析:
对于一个字符串,我们利用函数str2label(string str) 将其转化为“一个标签”。比如说“apple”变为“a1e1p2l1”这样的标签。对于乱序的字符串最终都会变为同一个标签。然后再利用map结构进行键值对的查找。

#include<vector>
#include<iostream>
#include<string>
#include<map>
using namespace std;
//给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。
//如果一个字符串是乱序字符串,那么他存在一个字母集合相同,
//但顺序不同的字符串也在S中。
class Solution {
public:    
    /**
     * @param strs: A list of strings
     * @return: A list of strings
     */
    string str2label(string str)
    {
          if(str=="") return str;//特殊情况考虑
        int hashtable[26]={0};
        for(int i=0;i<str.size();i++)
        {
            int index=str[i]-'a';
            hashtable[index]++;
        }
        string res;
        for(int i=0;i<26;i++)
        {
            if(hashtable[i]==0) continue;
            else
            {
                res.push_back(char('a'+i));
                res.push_back(char(hashtable[i])+'0');//如何将int变为char
            }
        }
        return res;
    }
    vector<string> anagrams(vector<string> &strs) {
        // write your code here
        map<string,vector<string>>m;//这里map键值对的设置很关键
        vector<string> result;
        for(int i=0;i<strs.size();i++)
        {
            string str=str2label(strs[i]);
            auto it=m.find(str);
            if(it==m.end()) {
                vector<string> res;
                res.push_back(strs[i]);
                m.insert(pair<string,vector<string> >(str,res));
            }
            else
            {
                it->second.push_back(strs[i]);
            }
        }
        for(auto it=m.begin();it!=m.end();it++)
        {
            if(it->second.size()>1){
                for(auto ite=it->second.begin();ite!=it->second.end();ite++)
                    result.push_back(*ite);
            }
        }
        return result;
    }
};

相关文章

  • Lintcode-乱序字符串

    问题描述如下:给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他...

  • 乱序字符串

    给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集...

  • LintCode 乱序字符串

    今天做了一道中等难度的字符串题目,这道题目花了我两个小时,不过也做了不少的思考,写篇日志记录一下我的思考过程。 首...

  • 乱序字符串重排

    为什么会有这个小东西 就是因为在学习某个文档的时候是乱序的,看起来和使用起来忒难受,所以为了达到想要的效果随便写了...

  • Lintcode-字符串匹配算法

    问题描述 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 ...

  • LintCode - 乱序字符串(普通)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 难度:中等 要求: 给出一个字符串数组S,找到其中所有的乱序...

  • LintCode-交叉字符串-动态规划

    描述 给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。 样例 比如 s1 = "aabcc" ...

  • LintCode 171-乱序字符串

    分析 hash的使用

  • 最近只有图片

    乱序

  • 拖延症的2018

    乱序结束

网友评论

本文标题:Lintcode-乱序字符串

本文链接:https://www.haomeiwen.com/subject/fpiewttx.html