zoukankan      html  css  js  c++  java
  • (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]);
                }
            }
        }
    };
  • 相关阅读:
    献给正在奋斗的人
    Delphi TRzTreeView 或者TRzCheckTree或者TTreeView离开焦点还显示灰色的选择状态
    笑话(三)
    王永庆建立企业奖励机制
    DbGridEh表格Tile居中,但是内容左对齐的做法
    DelPhi LockWindowUpdate的函数的用法
    Delphi DbgridEh实现鼠标拖动选中列,并使复选框选中
    国足输球,总结原因
    TPath
    TMemoryStream、String与OleVariant互转
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4693836.html
Copyright © 2011-2022 走看看