zoukankan      html  css  js  c++  java
  • 0242. Valid Anagram (E)

    Valid Anagram (E)

    题目

    Given two strings s and t , write a function to determine if t is an anagram of s.

    Example 1:

    Input: s = "anagram", t = "nagaram"
    Output: true
    

    Example 2:

    Input: s = "rat", t = "car"
    Output: false
    

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

    Follow up:
    What if the inputs contain unicode characters? How would you adapt your solution to such case?


    题意

    判断两个给定的单词(只包含小写字母)是否互为anagram,即字母组成相同但排列顺序不同的单词。

    思路

    如果只包含小写字母,只需要遍历每一个字符串,统计每个字符串中每个字母出现的次数即可。

    也可以将字符串排序后逐个比较。

    Follow up仍可以用Hash的思想进行处理,只不过不能只开一个简单的数组来当hash表。


    代码实现

    Java

    Hash

    class Solution {
        public boolean isAnagram(String s, String t) {
            if (s.length() != t.length()) {
                return false;
            }
    
            int count[] = new int[26];
    
            for (int i = 0; i < s.length(); i++) {
                count[s.charAt(i) - 'a']++;
                count[t.charAt(i) - 'a']--;
            }
    
            for (int i = 0; i < 26; i++) {
                if (count[i] != 0) {
                    return false;
                }
            }
            
            return true;
        }
    }
    

    排序

    class Solution {
        public boolean isAnagram(String s, String t) {
            if (s.length() != t.length()) {
                return false;
            }
    
            char[] ss = s.toCharArray();
            char[] tt = t.toCharArray();
            Arrays.sort(ss);
            Arrays.sort(tt);
            
            for (int i = 0; i < ss.length; i++) {
                if (ss[i] != tt[i]) {
                    return false;
                }
            }
            
            return true;
        }
    }
    

    Follow up

    class Solution {
        public boolean isAnagram(String s, String t) {
            if (s.length() != t.length()) {
                return false;
            }
    
            Map<Character, Integer> map = new HashMap<>();
    
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                if (!map.containsKey(c)) {
                    map.put(c, 1);
                } else {
                    map.put(c, map.get(c) + 1);
                }
            }
    
            for (int i = 0; i < t.length(); i++) {
                char c = t.charAt(i);
                if (!map.containsKey(c) || map.get(c) == 0) {
                    return false;
                } else {
                    map.put(c, map.get(c) - 1);
                }
            }
    
            return true;
        }
    }
    

    JavaScript

    /**
     * @param {string} s
     * @param {string} t
     * @return {boolean}
     */
    var isAnagram = function (s, t) {
      if (s.length !== t.length) return false
      const cnt = new Map()
      for (const c of s) {
        if (!cnt.has(c)) cnt.set(c, 1)
        else cnt.set(c, cnt.get(c) + 1)
      }
      for (const c of t) {
        if (cnt.has(c) && cnt.get(c) > 0) cnt.set(c, cnt.get(c) - 1)
        else return false
      }
      return true
    }
    
  • 相关阅读:
    ant 软件包不存在报错
    在 Internet Explorer 中使用 Windows 窗体控件
    智能客户端
    Back to the Future with Smart Clients
    "Automation 服务器不能创建对象" 的解决方案
    Top 10 Reasons for Developers to Create Smart Clients
    Updater Application Block for .NET
    Smart Client Application Model and the .NET Framework 1.1
    Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients
    智能客户端技术总结(二)
  • 原文地址:https://www.cnblogs.com/mapoos/p/14398216.html
Copyright © 2011-2022 走看看