LintCode - 乱序字符串(普通)

版权声明:本文为博主原创文章,未经博主允许不得转载。

难度:中等
要求:

给出一个字符串数组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) {
        if (strs == null || strs.length == 0) {
            return null;
        }

        List<String> reValue = new ArrayList<String>();
        Map<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();

        for (String s : strs) {
            String key = getKey(s);
            if (map.containsKey(key)) {
                map.get(key).add(s);
            } else {
                ArrayList<String> list = new ArrayList<String>();
                list.add(s);
                map.put(key, list);
            }
        }

        for (ArrayList<String> list : map.values()) {
            if (list.size() > 1) {
                reValue.addAll(list);
            }
        }
        return reValue;
    }
    

    /**
     * 生成key(比如 "and" 和 "dan",他们的“ Hash 值 ”就是“a1d1n1","array" 和 "yarar" 就是 a2r2y1)
     *
     * @param s
     * @return
     */
    private String getKey(String s) {
        if (s == null || s.length() == 0) {
            return "";
        }
        int[] count = new int['z' - 'a' + 1];
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            count[c - 'a']++;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < count.length; i++) {
            int value = count[i];
            if (value > 0) {
                sb.append(i + 'a').append(value);
            }
        }
        return sb.toString();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天做了一道中等难度的字符串题目,这道题目花了我两个小时,不过也做了不少的思考,写篇日志记录一下我的思考过程。 首...
    HarperKoo阅读 9,551评论 7 6
  • 题目 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个...
    六尺帐篷阅读 3,602评论 0 1
  • 这是一道中等难度的字符串题目。本来按照我的想法,我觉得逻辑上没有问题,但是出在JAVA上的细节问题。虽然,我的逻辑...
    2a25936eedd9阅读 2,675评论 0 0
  • 问题描述如下:给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他...
    爱秋刀鱼的猫阅读 3,165评论 1 1
  • 一.介绍 1.定位使用的是: CoreLocation 框架 2. ios8 ios9之后的定位的改变 1⃣️...
    晨阳聊电影阅读 9,310评论 1 12

友情链接更多精彩内容