lintcode:anagrams 乱序字符串
题目
乱序字符串
给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。
对于字符串数组 ["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 乱序字符串的更多相关文章
- 乱序字符串anagrams
		
[抄题]: 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 对于字符串数组 ["lin ...
 - Lintcode--003(乱序字符串)
		
给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包含小写字母 样例 ...
 - 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 ...
 - LintCode-乱序字符串
		
题目描述: 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包含小写字 ...
 - lintcode-171-乱序字符串
		
171-乱序字符串 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包 ...
 - VC6.0 多线程输出乱序问题
		
今天尝试编写多线程最简单的例子 #include "stdafx.h" #include "windows.h" #include <iostream&g ...
 - 【转】文件中有10G个整数,乱序排列,要求找出中位数
		
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). ...
 - [Android Security]   APK自我保护 - 代码乱序
		
cp : https://segmentfault.com/a/1190000005095406 乱序原理 为了增加逆向分析的难度,可以将原有代码在 smali 格式上进行乱序处理同时又不会影响程序的 ...
 - sort排序bug乱序
		
项目需要对组件的zIndex值进行降序排列,刚开始采用的是sort进行排序,排完之后感觉没问题,毕竟也是经常用的,可是昨天无意中把zIndex值打出来看,一看不知道,发现只要排序的组件超过10个就出问 ...
 
随机推荐
- iOS相机操作笔记
			
最近忙于项目,需要拍摄图片,这里先列出部分测试代码. // // FirstViewController.m // UiTest // // Created by Tang Huaming on 16 ...
 - jQuery1.9 $.browser 的替代方法
			
jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support . 在更新的 2.0 版本中,将不再支持 IE 6/7/8. ...
 - php生成txt文件换行问题
			
用双引号即"\r\n"换行,不能用单引号即'\r\n'.
 - 用MySQL log调试程序
			
打开my.ini文件 在[mysqld]的下面加上log = c:/mysql_query.log.txt重启mysql 以后你用可以用editplus查看你运行的sql了,不用在程序里一句句的用lo ...
 - HTML5的页面资源预加载技术(Link prefetch)加速页面加载
			
不管是浏览器的开发者还是普通web应用的开发者,他们都在做一个共同的努力:让Web浏览有更快的速度感觉.有很多已知的技术都可以让你的网站速度变得更快:使用CSS sprites,使用图片优化工具,使用 ...
 - IE6和IE7的line-height和现代浏览器不一致的问题
			
1.我们发现在网页中设置line-height后,现代浏览器显示正常,可是在IE6 IE7下却不能正确解析,这时需要再额外的为旧版浏览器声明: p{ line-height: 30px; *line- ...
 - linux下的汇编环境搭建(nasm)
			
第一步:先判断系统是否已经安装了nasm--------------->打开终端,执行whereis nasm :如果显示nasm: /usr/bin/nasm ,则已经安装:如果只显示nasm ...
 - tomcat中server.xml文件解析
			
下面我们将讲述这个文件中的基本配置信息,更具体的配置信息见tomcat的文档 元素名 属性 解释 server port 指定一个端口,这个端口负责监听关闭tomcat的请求 shutdown 指定向 ...
 - Java中main函数参数String args[] 和 String[] args 区别
			
其实没什么区别的:当初我也是这样的疑问,呵呵:非要说区别就看下面:执行效果上没有不同, 但在语法意义上略有不同. 比如, String与String[], 前者叫字符串类型而后者叫字符串数组类型. S ...
 - UML类图总结
			
前言 类图和序列图是UML中最常用的两种Diagram.我将做详细的总结.在许多书中,或者网站中,在介绍一个系统的子系统的设计时,很多时候,都是给出简单的类图来简述构成子系统的类之间的关系.这足以说明 ...