题目

乱序字符串

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

您在真实的面试中是否遇到过这个题?

Yes
样例

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

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

注意

所有的字符串都只包含小写字母

解题

感觉很简单,搞了近两个小时,写了下面的程序

public class Solution {
/**
* @param strs: A list of strings
* @return: A list of strings
*/
public List<String> anagrams(String[] strs) {
// write your code here
List<String> list = new ArrayList<String>();
if(strs.length == 0 || strs ==null)
return list;
int i=0;
int j=0;
int k = -1;
while(i<strs.length ){
while(j< strs.length ){
if(compare(strs[i],strs[j])){
k=i;
break;
}else{
j++;
}
}
if(k==i) break;
i++;
}
if(k==-1)
return list;
list.add(strs[k]);
for( i=0;i<strs.length ;i++)
if(i!=k && compare(strs[k],strs[i]))
list.add(strs[i]);
return list;
}
public boolean compare(String str1,String str2){
HashMap<Character,Integer> map = new HashMap<Character,Integer>();
if(str1.length()!= str2.length())
return false;
for(int i=0;i<str1.length();i++){
char ch = str1.charAt(i);
if(!map.containsKey(ch)){
map.put(ch,1);
}else{
map.put(ch,map.get(ch)+1);
}
}
for(int j=0;j<str2.length();j++){
char ch = str2.charAt(j);
if(!map.containsKey(ch)){
return false;
}else{
map.put(ch,map.get(ch)-1);
if(map.get(ch)<0)
return false;
}
}
return true;
}
}

Java Code

然而可以有多个

输入
["tea","","eat","","tea",""]
输出
["eat","tea","tea"]
期望答案
["","","","eat","tea","tea"]

简书给的程序很好,或者说作者很会想,把由相同字母组成的单词映射到同一个key值

这里,对单词排序后,统计出现的次数,也是让映射的key值唯一

programcreek 也是排序的方法

Java

public class Solution {
/**
* @param strs: A list of strings
* @return: A list of strings
*/
public List<String> anagrams(String[] strs) {
// write your code here
List<String> list = new ArrayList<String>();
if(strs == null || strs.length ==0)
return list;
Map<String,Integer> map = new HashMap<String,Integer>();
String[] strs2 = new String[strs.length];
for(int i=0;i< strs.length;i++){
char[] ch = strs[i].toCharArray();
Arrays.sort(ch);
strs2[i] = String.valueOf(ch);
if(!map.containsKey(strs2[i])){
map.put(strs2[i],1);
}else{
map.put(strs2[i],map.get(strs2[i]) + 1);
}
}
for(int i=0;i<strs.length;i++){
if(map.get(strs2[i]) >1)
list.add(strs[i]);
}
// if(strs.length >=6)
// System.out.println(0);
return list;
}
}

Java Code

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

  1. 乱序字符串anagrams

    [抄题]: 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 对于字符串数组 ["lin ...

  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. 【Qt】Qt之进程间通信(IPC)【转】

    简述 进程间通信,就是在不同进程之间传播或交换信息.那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区.但是,系统空间却是“ ...

  2. Scrapy源码学习(一)

    用Scrapy已经有一段时间了,觉得该是看一下源码的时候了.最开始用的时候还是0.16的版本,现在稳定版已经到了0.18.结合使用Scrapy的过程,先从Scrapy的命令行看起. 一.准备 下载源代 ...

  3. vs2010中的反编译

    有这样的需求,一个.dll文件,如何查看里面的代码呢?网上有很多关于反编译的运用的. http://blog.csdn.net/lyflcear/article/details/8102057 昨天( ...

  4. Python中处理时间 —— time模块

    time模块 time 模块可用来处理时间,详细的说明参考 time模块说明. 逝去的秒数 逝去的秒数表示从某个时间(Python中是"Thu Jan 1 07:00:00 1970&quo ...

  5. WPF之旅(一)- 概述

    WPF与之前出现的其他技术相比引入了“内置硬件加速”和“分辨率无关”等创新功能.WPF是一种成熟的技术,它是几个已经发布的.NET平台的一部分,并通过几个版本不断地进行完善(WPF3.0 -> ...

  6. Java 线程池框架核心代码分析

    前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的.线程池应运而生,成为我们管理线程的利器.Java 通过Executor接口,提供了一种标准的方法将任务的提交过 ...

  7. Java枚举常见7种用法

    DK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便.用法一:常量在JDK1.5 之前,我们定义常量都是: publicstaticfianl…… .现 ...

  8. 【原创】jQuery插件 - Booklet翻书特效教程(一) 一般设置

    jQuery插件 - Booklet翻书特效教程(一) 一般设置 本文由五月雨恋提供,转载请注明出处. 一.宽高(width/height) 1.自定义大小 $(function(){ // 自定义页 ...

  9. WPF中使用MVVM模式进行简单的数据绑定

    计划慢慢整理自己在WPF学习和工作应用中的一些心得和想法,先从一个简单的用法说起 在WPF中,XAML标记语言中绑定数据,而数据源就是指定为ViewModel类,而非界面本身的逻辑代码类 这样一定程度 ...

  10. SAP如何使用关于序列号的表