[抄题]:

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

对于字符串数组 ["lint","intl","inlt","code"]

返回 ["lint","inlt","intl"]

[思维问题]:

[一句话思路]:

key是相同的哈希值(重要),value是不同的字符串 多余一个就取出来

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. result结果要放在ArrayList<String>中, 整体是arraylist,里面的东西是string。temp : map.values()表示把字符串里的东西都拿出来
  2. i < str.length() 字符串取长度要加括号
  3. 数据结构、返回语句都要写在自己的方法里,而不是solution class里
  4. 如果没有key,用put函数新建一个点加进去new ArrayList<String>(),这时候还没有添加字符串进去。之后不论有没有key,都要用add函数添加字符串:map.get(hash).add(str),所以不要写else。
  5. int a = 378551;
    int b = 63989;记住就好

[二刷]:

  1. hash = nums[i] + hash * a;
    a = a * b;

    用来生成hash值

  2. 字符串都存储于ArrayList<String>()动态数组之中,因为不知道会有多长
  3. str.charAt(i)表示取出字母
  4. int[] count数组在循环里定义,不要在循环外定义,免得有添加后删除不了的元素

[三刷]:

[四刷]:

[五刷]:

[总结]:

还是重要的作为key放在前面:这次是同一组合字母的hash值

[复杂度]:Time complexity: O(n) Space complexity: O(n)

[英文数据结构,为什么不用别的数据结构]:

key-value

[其他解法]:

[Follow Up]:

[题目变变变]:

public class Solution {
/*
* @param strs: A list of strings
* @return: A list of strings
*/
//get hash
private int getHash(int[] nums) {
int hash = 0;
int a = 378551;
int b = 63989;
for (int i = 0; i < nums.length; i++) {
hash = nums[i] + hash * a;
a = a * b;
}
return hash;
} public List<String> anagrams(String[] strs) {
HashMap<Integer,ArrayList<String>> map = new HashMap<Integer,ArrayList<String>>(); //put into count
for (String str : strs) {
int[] count = new int[26];
for (int i = 0; i < str.length(); i++) {
count[str.charAt(i) - 'a']++;
}
int hash = getHash(count);
//map or not
if (!map.containsKey(hash)) {
map.put(hash, new ArrayList<String>());
}
map.get(hash).add(str);
} //result
ArrayList<String> result = new ArrayList<String>();
for (ArrayList<String> temp : map.values()) {
if (temp.size() > 1) {
result.addAll(temp);
}
}
return result;
}
}

乱序字符串anagrams的更多相关文章

  1. lintcode:anagrams 乱序字符串

    题目 乱序字符串 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 您在真实的面试中是否遇到过这个 ...

  2. Lintcode--003(乱序字符串)

    给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包含小写字母   样例 ...

  3. 760. Find Anagram Mappings乱序字符串的坐标位置

    [抄题]: Given two lists Aand B, and B is an anagram of A. B is an anagram of A means B is made by rand ...

  4. LintCode-乱序字符串

    题目描述: 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包含小写字 ...

  5. lintcode-171-乱序字符串

    171-乱序字符串 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包 ...

  6. VC6.0 多线程输出乱序问题

    今天尝试编写多线程最简单的例子 #include "stdafx.h" #include "windows.h" #include <iostream&g ...

  7. 【转】文件中有10G个整数,乱序排列,要求找出中位数

    题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). ...

  8. [Android Security] APK自我保护 - 代码乱序

    cp : https://segmentfault.com/a/1190000005095406 乱序原理 为了增加逆向分析的难度,可以将原有代码在 smali 格式上进行乱序处理同时又不会影响程序的 ...

  9. sort排序bug乱序

    项目需要对组件的zIndex值进行降序排列,刚开始采用的是sort进行排序,排完之后感觉没问题,毕竟也是经常用的,可是昨天无意中把zIndex值打出来看,一看不知道,发现只要排序的组件超过10个就出问 ...

随机推荐

  1. 使用XML-RPC进行远程文件共享

    这是个不错的练习,使用python开发P2P程序,或许通过这个我们可以自己搞出来一个P2P下载工具,类似于迅雷.XML-RPC是一个远程过程调用(remote procedure call,RPC)的 ...

  2. Xss漏洞原理分析及简单的讲解

    感觉百度百科 针对XSS的讲解,挺不错的,转载一下~   XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XS ...

  3. Samba 简介

    SMB 代表的是服务器消息块 (Server Message Block),它是用于在 Windows 上共享文件的协议的原始名称. CIFS 代表公共 Internet 文件系统 (Common I ...

  4. 对 Spring 的核心(AOP 和 IOC)的理解(大白话)

    Spring 首先它是一个开源而轻量级的框架.其核心容器的主要组件是Bean工厂(BeanFactory).Bean工厂使用控制反转(IOC)模式来降低程序代码之间的耦合度,并提供了面向切面编程(AO ...

  5. Oracle中查询表的大小、表的占用情况和表空间的大小

    有两种含义的表大小.一种是分配给一个表的物理空间数量,而不管空间是否被使用.可以这样查询获得字节数: select segment_name, bytes from user_segments whe ...

  6. 解决maven工程 子工程中的一些配置读取进来的问题

    方案:在父工程中手动配置一些节点 <build> <!-- 插件 --> <plugins> <plugin> <groupId>org.a ...

  7. HTML5 Canvas ( 绘制一轮弯月, 星空中的弯月 )

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. IP 别名和辅助 IP 地址

    https://blog.csdn.net/xiewen99/article/details/54729112?utm_source=itdadao

  9. MYSQL三大范式

    第一范式:确保每列的原子性. 第一范式是最基本的范式. 数据库表中的字段都是单一属性的,不可再分. 只要是关系数据库都满足第一范式 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子 ...

  10. 13.小结Action

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 在struts2中一个普通的java类只要有public String ex ...