美文网首页
LintCode - 乱序字符串(普通)

LintCode - 乱序字符串(普通)

作者: 柒黍 | 来源:发表于2017-02-15 22:57 被阅读0次

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

难度:中等
要求:

给出一个字符串数组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();
    }
}

相关文章

  • LintCode - 乱序字符串(普通)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 难度:中等 要求: 给出一个字符串数组S,找到其中所有的乱序...

  • LintCode 乱序字符串

    今天做了一道中等难度的字符串题目,这道题目花了我两个小时,不过也做了不少的思考,写篇日志记录一下我的思考过程。 首...

  • Lintcode-乱序字符串

    问题描述如下:给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他...

  • LintCode 171-乱序字符串

    分析 hash的使用

  • LintCode - 旋转字符串(普通)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 难度:容易 要求: 给定一个字符串和一个偏移量,根据偏移量旋...

  • 刷Lintcode,乱序字符(1)

    这是一道中等难度的字符串题目。本来按照我的想法,我觉得逻辑上没有问题,但是出在JAVA上的细节问题。虽然,我的逻辑...

  • 乱序字符串

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

  • [leetcode/lintcode 题解] 解码字符串 ·

    leetcode/lintcode 题解] 解码字符串 · Decode String 【题目描述】 给出一个表...

  • python 字符串倒置(lintcode)

    描述: 字符串置换 原题地址:http://www.lintcode.com/zh-cn/problem/stri...

  • 乱序字符串重排

    为什么会有这个小东西 就是因为在学习某个文档的时候是乱序的,看起来和使用起来忒难受,所以为了达到想要的效果随便写了...

网友评论

      本文标题:LintCode - 乱序字符串(普通)

      本文链接:https://www.haomeiwen.com/subject/izlcwttx.html