`

Anagram总结

阅读更多
有关异构词的题目,考察我们对字符串的处理能力,这里列举leetcode两道关于异构词的题目。
1,Valid Anagram
Given two strings s and t, write a function to determine if t is an anagram of s.

For example,
s = "anagram", t = "nagaram", return true.
s = "rat", t = "car", return false.

Note:
You may assume the string contains only lowercase alphabets.

题目的意思是给定两个字符串,判断它们是否是异构词。
首先我们想到的方法是将字符串转换成字符数组,然后排序之后比较,如果两个新的字符串相同就返回true; 否则返回false;代码如下:
public class Solution {
    public boolean isAnagram(String s, String t) {
        char[] s1 = s.toCharArray();
        char[] t1 = t.toCharArray();
        Arrays.sort(s1);
        Arrays.sort(t1);
        s = new String(s1);
        t = new String(t1);
        if(s.equals(t)) return true;
        return false;
    }
}


我们也可以采用一种类似于计数排序的方法来处理这个问题,先将一个字符串中的每个字符按照它们对应的不同的值来存入数组中,然后用第二个字符串中每个字符对应的值减去依次相减,如果数组中有的值不为零就返回false,如果全为0就返回true。代码如下:
public class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()) return false;
        int[] count = new int [128];
        for (int i = 0; i < s.length(); i++) 
            count[s.charAt(i) - '0'] ++;
        for (int j = 0; j < t.length(); j++) 
            count[t.charAt(j) - '0'] --;
            
        for(int i = 0; i < count.length; i++) {
            if(count[i] != 0)
                return false;
        }
        return true;
    }
}


2,Group Anagrams
Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"],
Return:

[
  ["ate", "eat","tea"],
  ["nat","tan"],
  ["bat"]
]

Note:
For the return value, each inner list's elements must follow the lexicographic order.
All inputs will be in lower-case.

题目的意思是给定一个字符串数组,将异构词分组,然后输出。我们借助哈希表,方法类似于第一题中的第一个方法,先排序,然后存放在哈希表中的key中,代码如下:
public class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> hm = new HashMap<String, List<String>>();
        for(int i = 0; i < strs.length; i++) {
            char[] temp = strs[i].toCharArray();
            Arrays.sort(temp);
            String s = new String(temp);
            if(!hm.containsKey(s)) {
                hm.put(s, new ArrayList<String>());
            } 
            hm.get(s).add(strs[i]);
        }
        for(List<String> vals : hm.values()) {
            Collections.sort(vals);
        }
        return new ArrayList<List<String>>(hm.values());
    }
}
分享到:
评论

相关推荐

    valid anagram

    #### 总结 通过上述分析,我们不仅理解了如何使用哈希表解决异位词的问题,还深入探讨了代码的具体实现方式及其背后的逻辑。这种方法不仅可以应用于字符串的异位词检测,还可以扩展到其他类型的数据结构问题中,...

    Anagram-Finder

    总结,通过C#编程实现Anagram-Finder,不仅可以锻炼我们的编程技巧,还能让我们深入了解字符串处理、排序算法以及数据结构的应用。通过不断优化和扩展,这个简单的程序可以成为解决复杂问题的有力工具。在实际的项目...

    brute-force-anagram-solver:一个低效的 anagram 求解器,蛮力猜测 - 用 python 编写

    总结来说,这个项目为我们提供了一个了解和实践Python编程以及蛮力算法的机会。尽管它在效率上可能不尽人意,但可以帮助初学者理解算法和数据结构的基本概念。在实际开发中,我们应当根据问题的具体需求,选择更为...

    phpAG - PHP Anagram Generator-开源

    总结,phpAG 是一个利用 PHP 实现的开源字谜生成工具,它展示了 PHP 在字符串处理、算法实现以及文件操作等方面的能力。通过深入理解 phpAG 的工作原理,开发者不仅可以提升 PHP 编程技能,还能了解如何设计和实现一...

    Anagrams:一个有趣的游戏,包括字谜

    首先,我们来理解字谜(Anagram)的概念。字谜是通过重新排列一个单词的所有字母来形成另一个单词的游戏。例如,单词"act"可以变成"cat"或"tac"。在Anagrams游戏中,玩家需要快速识别出这些重新排列的词组,这需要对...

    算法,数据结构,Python,剑指offer,机器学习,leetcode.zip

    20160717加入leetcode部分## 更新 20160730更新 20160814整饬如果对你有帮助,请记得点击github工程上的star,^_^ 现在总结如下数据結構markdown格式链表及常见操作平衡查找树AVL清晰方法检测变位词Anagram构建堆二...

    AnagramFinder

    总结,AnagramFinder项目展示了Java在文本处理方面的强大能力,通过它,我们可以学习到如何运用Java处理实际问题,同时也为我们提供了一个探究anagram这个有趣概念的窗口。无论是新手还是经验丰富的开发者,都可以...

    anagramnode:用 node.js 制作的字谜游戏

    总结,"anagramnode"是一个基于Node.js的字谜游戏项目,它展示了如何利用JavaScript在服务器端开发交互式应用。通过分析项目结构和文件,我们可以了解其工作原理,并学习到Node.js开发、字谜游戏逻辑、用户交互处理...

    AnagramSolver-0.1.3-py2.py3-none-any.whl.zip

    总结来说,AnagramSolver-0.1.3-py2.py3-none-any.whl.zip 是一个支持 Python 2 和 3 的软件包,包含了一个 Anagram 解决器的应用,并提供了一份使用说明,用户可以通过 `pip` 直接安装并使用。在实际应用中,这种...

    Golang字符串变位词示例详解

    总结起来,本文通过实例展示了在 Go 和 Java 语言中如何判断两个字符串是否为变位词。这个过程涉及到字符串处理、ASCII 表以及简单的数组操作。对于学习这两种语言的开发者来说,理解并掌握这种算法有助于提升字符串...

    leetcode分类-leetcode:leetcode刷题

    3. **字符串哈希**:如“两字符串是否互为变位词”(Anagram),需要计算字符串的哈希值来判断是否为变位词。 4. **正则表达式匹配**:“实现一个简单的正则表达式匹配器”(Regular Expression Matching),涉及到...

    Python实现对变位词的判断

    在编程领域,变位词(Anagram)是指两个或多个字符串,它们包含完全相同的字符,但字符的排列顺序不同。例如,“python”和“typhon”、“heart”和“earth”都是变位词。判断两个字符串是否为变位词是一项常见的...

Global site tag (gtag.js) - Google Analytics