zoukankan      html  css  js  c++  java
  • 242. Valid Anagram

    原题链接:https://leetcode.com/problems/valid-anagram/solution/
    实现如下:

    import java.util.Arrays;
    
    /**
     * Created by clearbug on 2018/2/26.
     */
    public class Solution {
    
        public static void main(String[] args) {
            Solution s = new Solution();
    
        }
        // 官方方法一:就是我的方法二啦,只不过比我的方法二还要简洁些!
        // 官方方法二:就是我的方法一啦,只不过只用了一个哈希表就实现了功能,官方答案就是牛逼啊!
        // 至于拓展中所说的,如果字符串出现了 Unicode 字符了怎么办?那就别犹豫了,直接使用 JDK 官方提供的哈希表实现 HashMap 吧!因为就算自己创建哈希表的话,空间方面也得直接设置为最大,可能造成了浪费!
    
        /**
         * 方法二:我看了 Related Topic 里面不光提到了哈希表,还提到了排序。恍然大悟,对啊,还可以排序解决的嘛
         *
         * 时间复杂度:O(nlogn)
         * 空间复杂度:O(1)
         *
         * Submission Detail: 49.67 %
         * Runtime: 8 ms
         *
         * @param s
         * @param t
         * @return
         */
        public boolean isAnagram(String s, String t) {
            if (s == null || t == null || s.length() != t.length()) {
                return false;
            }
    
            char[] sChars = s.toCharArray();
            char[] tChars = t.toCharArray();
            Arrays.sort(sChars); // 这里排序底层实现也是将字符串每个字符放入一个哈希表中,然后再从哈希表中恢复出来的。。。
            Arrays.sort(tChars);
            for (int i = 0; i < sChars.length; i++) {
                if (sChars[i] != tChars[i]) {
                    return false;
                }
            }
            return true;
        }
    
        /**
         * 方法一:初看这道题目,我的思路就是使用哈希表来解决。当然了我这个方法是有一定局限性的,那就是只能适用于小写字母组成的字符串,一旦
         * 字符串中出现了 Unicode 字符,立马完蛋。。。
         *
         * 时间复杂度:O(n)
         * 空间复杂度:O(1)
         *
         * Submission Detail: 82.75 %
         * Runtime: 6 ms
         *
         * @param s
         * @param t
         * @return
         */
        public boolean isAnagram1(String s, String t) {
            if (s == null || t == null) {
                return true;
            }
    
            int[] sTable = new int[26];
            int[] tTable = new int[26];
    
            for (int i = 0; i < s.length(); i++) {
                sTable[s.charAt(i) - 'a']++;
            }
            for (int i = 0; i < t.length(); i++) {
                tTable[t.charAt(i) - 'a']++;
            }
    
            for (int i = 0; i < sTable.length; i++) {
                if (sTable[i] != tTable[i]) {
                    return false;
                }
            }
            return true;
        }
    
    }
    
  • 相关阅读:
    C#中DateTime.Ticks属性及Unix时间戳转换
    SQL Server:统计数据库中每张表的大小
    SQL Server:统计数据库中每张表的大小
    SQL Server:统计数据库中每张表的大小
    SQL Server 2008 R2:快速清除日志文件的方法
    SQL Server 2008 R2:快速清除日志文件的方法
    SQL Server 2008 R2:快速清除日志文件的方法
    ACM_HDU 1231 最大连续子序列 (dp)_代码分析
    斑马难题Step by Step
    多种配置的分布式配置中心
  • 原文地址:https://www.cnblogs.com/optor/p/8727218.html
Copyright © 2011-2022 走看看