• 题目:https://www.nowcoder.com/practice/e84e273b31e74427b2a977cbfe60eaf4?tpId=46&tqId=29130&tPage=3&rp=3&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking
  • 思路:
    •   首先简单介绍一下Anagram(回文构词法)。Anagrams是指由颠倒字母顺序组成的单词,比如“dormitory”颠倒字母顺序会变成“dirty room”,“tea”会变成“eat”。回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。

      For example:

      Input:  ["tea","and","ate","eat","den"]

      Output:   ["tea","ate","eat"]

    •   这里的思路比较简单:主要的方法就是利用哈希表来进行存储(将字符串作为索引,字符串的下标作为实值)。对给出的字符串数组一一进行遍历,每次单独的处理一个字符串:
      • 这里有个技巧:可以将每个字符串都按字符大小排序,这样方便查找
      • 如果该字符串不在哈希表中,就将他存储哈希表(字符串的值作为索引,下标作为实值)
      • 如果找到一样的字符串,将该字符串存入res中:并且将与该字符串对应的那个匹配的anagrams字符串也存入res中,给定一个标志不再重复的将她存入res中。
  • 代码
    class Solution {
    public:
    vector<string> anagrams(vector<string> &strs) {
    string str;
    map<string, int> map1;
    vector<string> res;
    for (int i=; i<strs.size(); i++){
    //将每一个字符串单独进行处理,将他们按字符大小进行排序,然后去哈希表中进行排序,然后去哈希表中 匹配是否存在
    //相同的字符,如果找到就将他放入到vector中
    str = strs[i];
    sort(str.begin(), str.end());
    if (map1.find(str) == map1.end()){//找到哈希表的结尾也没找到,用该字符串作为哈希表的键,value为下标值
    map1[str] = i;
    }
    else{
    //将第一次出现的anagrams设置一个哈希值,当下一个anagrams出现的时候将第一次出现的那个字符串进入res中
    //并且将他的哈希值置为-1,以后不再进入res
    if (map1[str] >= ){
    res.push_back(strs[map1[str]]);
    map1[str] = -;
    }
    //找到相同的 将他放入res
    res.push_back(strs[i]);
    }
    }
    return res;
    }
    };

(数组)字符串的回文构词法( anagrams)的更多相关文章

  1. POJ 1159 Palindrome(字符串变回文:LCS)

    POJ 1159 Palindrome(字符串变回文:LCS) id=1159">http://poj.org/problem? id=1159 题意: 给你一个字符串, 问你做少须要 ...

  2. java判断字符串是否回文

    java判断字符串是否回文 /** * java判断字符串是否回文<br><br> * 基本思想是利用字符串首尾对应位置相比较 * * @author InJavaWeTrus ...

  3. UVA - 11584 划分字符串的回文串子串; 简单dp

    /** 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34398 UVA - 11584 划分字符串的回文串子串: 简单 ...

  4. BZOJ5384 有趣的字符串题 回文树

    神奇的结论: 一个字符串的所有回文后缀的长度,可以形成$k$个等差数列,$k$是$log$级的 考虑前$R$个字符组成的字符串,对于一个等差数列,假设组成这个等差数列的回文串,最短的叫$a$,最长的叫 ...

  5. Ural 1297 Palindrome(后缀数组+最长回文子串)

    https://vjudge.net/problem/URAL-1297 题意: 求最长回文子串. 思路: 先将整个字符串反过来写在原字符串后面,中间需要用特殊字符隔开,那么只需要某两个后缀的最长公共 ...

  6. ural 1297 后缀数组 最长回文子串

    https://vjudge.net/problem/URAL-1297 题意: 给出一个字符串求最长回文子串 代码: //论文题,把字符串反过来复制一遍到后边,中间用一个没出现的字符隔开,然后就是枚 ...

  7. bzoj 2124 等差子序列 树状数组维护hash+回文串

    等差子序列 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 1919  Solved: 713[Submit][Status][Discuss] Desc ...

  8. [程序员代码面试指南]字符串问题-回文最少分割数(DP)

    问题描述 给定一个字符串,输出把它全部切成回文子串的最小分割数. 例:str="ACDCDCDAD",输出2. 解题思路 DP 存储结构 dp数组dp[len+1],dp[i]表示 ...

  9. 判断回文字符串、回文链表、回文数(python实现)

    所谓回文字符串,就是正读和反读都一样的字符串,比如"level"或者"noon"等等就是回文串.即是对称结构 判断回文字符串 方法一: def is_palin ...

随机推荐

  1. UVA 11291 Smeech

    [来源]https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  2. javascript之面试题精讲

    from:http://blog.csdn.net/q121516340/article/details/51332454 1,检测数组的几种方式: Array.isArray(); es5 toSt ...

  3. jquery.tmpl的使用

    jquery.tmpl是jQuery模板插件,http://plugins.jquery.com/tmpl/ (另外还有一个插件dot.js,不依赖与jquery,性能更佳,使用方法大同小异) 在网页 ...

  4. 在linux里建立一个快捷方式,连接到另一个目录

    ln -s 源目录 目标快捷方式比如要在/home/下面建立一个叫WIN7的快捷方式,指向/mnt/:ln -s /home/WIN7  /mnt

  5. POJ1159:动态规划

    Palindrome Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 60290   Accepted: 20998 Desc ...

  6. java代码实现通讯录实例,我不知道这有什么用。,

    运行显示: Friend:zl,Address:武大樱花美Colleagues:蔡依林,Department:麻城市人民政府 题目: 1.任务描述 完善上面通讯录名片的例子. 2.技能要点 掌握类继承 ...

  7. java流类基础练习。

    总结:BufferedReader.InputStreamReader.字节与字符的区别. package com.ds; import java.io.*; //从控制台输入字符串,输到sdd时停止 ...

  8. FileStream 常用的属性和方法

    FileStream常用的属性和方法 (转) 对流进行操作时要引用 using System.IO; 命名空间 FileStream常用的属性和方法: 属性: CanRead 判断当前流是否支持读取, ...

  9. Oracle 数据库表(常见的表)

    数据库表(常见的表) 堆组织表:普通表 索引组织表:iot 嵌套表 临时表 外部表 1 表 一个表最多1000列,oracle会把列大于254的行存储在多个单独的行段中, 表中的行是无限的,    术 ...

  10. [摘]Android逆向分析常用网站

    androidterm:   Android Terminal Emulator   http://code.google.com/p/androidterm/   droidbox:   Andro ...