题目

乱序字符串

给出一个字符串数组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. Freezable 对象(WPF)

    # Freezable 对象(WPF) # > Freezable 继承自 DependencyObject,同时添加了 Freezable 方法,用于冻结对象. --- ## 冻结对象 ## ...

  2. 未能加载文件或程序集“Report.Basic”或它的某一个依赖项。试图加载格式不正确的程序

    出现问题如下: 解决办法: 这是由于没有开启32位程序兼容模式 具体操作如下:找到对应的程序池--------高级设置-------修改“启用32位应用程序”状态修改为true

  3. ERROR 1005 (HY000): Can't create table'matrix.system_log' (errno: 150)

    CREATE TABLE `user` (`id` bigint(32) NOT NULL AUTO_INCREMENT ,`name` varchar(32) CHARACTER SET utf8 ...

  4. 【linux】

    virtualbox   hyper-v     vmware      KVM      LXC Utils       Docker

  5. 折腾了好久的macos+apache+php+phpmyadmin 终于成功了!

    由于最近需要布置mantis用来进行bug追踪,在此记录其过程. 由于PHP apache环境在Mac OS上是自带的,所以不需要另处下安装包,只需要简单配置一下即可. 首先打开终端输入命令: sud ...

  6. Linq小技巧

    遍历集合ForEach: listAll.Items.Clear(); List<Users> list = DP.UsersDAO.GetInfoList(); list.ForEach ...

  7. iOS常见问题(1)

    一.storyboard连线问题 产生原因:将与storyboard关联的属性删除了,但是storyboard中还保持之前所关联的属性. 解决: 1.点击view controller 2.点击这排最 ...

  8. c语言编程之循环队列

    利用链表实现的循环队列,完成了队列的入队和出队,对于队空和队满用了一个flag进行标记.入队flag++,出队flag-- #include"stdio.h" typedef in ...

  9. js eval()执行传参函数的写法

    .cs public class Message<T> { // 数据总数 public int? Total { get; set; } // 关键数据 public List<T ...

  10. android 开发 获取各种intent (图片、apk文件、excel、pdf等文件)

    public static Intent openFile(String filePath){ File file = new File(filePath); if(!file.exists()) r ...