【LeetCode】242. Valid Anagram 解题报告(Java & Python)
作者: 负雪明烛
 id: fuxuemingzhu
 个人博客: http://fuxuemingzhu.cn/
[LeetCode]
题目地址:https://leetcode.com/problems/valid-anagram/
Total Accepted: 78186 Total Submissions: 187211 Difficulty: Easy
题目描述
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?
题目大意
字典统计词频
这个题刚开始我想的是通过s字符串的每个字符能否在t中找到的方式。这个显然是错的。没有考虑到多次出现的问题。即两字符串长度相等,而且每个字符出现的次数相同,那么就是变位词。
题目中说了只有小写,那就是只有26个字母。统计一下出现的频率就好了。两个字符串中如果出现的词的频率都一样则说明是变位词。
算法如下:
public class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length()!=t.length()){
            return false;
        }
       int[] sTimes=new int[26];
       int[] tTimes=new int[26];
       for(int i=0;i<s.length();i++){
           sTimes[s.charAt(i)-'a']+=1;
           tTimes[t.charAt(i)-'a']+=1;
       }
       for(int i=0;i<sTimes.length;i++){
           if(sTimes[i]!=tTimes[i]){
               return false;
           }
       }
       return true;
    }
}
AC:12ms
在上面看到了用到了两个数组进行保存。这样空间复杂度比较大,可以用一个进行保存。
对于s, 将其作为字符数组进行遍历,在遍历的过程中,对每个出现的字符计数加一。
对于t, 同样将其遍历,对每个出现的字符计数减一。
如果s和t是anagram , 那么最后的charcount数组中所有字符的计数都应该是0, 否则就不是anagram。
简化之后的代码:
public class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length()!=t.length()){
            return false;
        }
       int[] times=new int[26];
       for(int i=0;i<s.length();i++){
           times[s.charAt(i)-'a']+=1;
           times[t.charAt(i)-'a']-=1;
       }
       for(int i=0;i<times.length;i++){
           if(times[i]!=0){
               return false;
           }
       }
       return true;
    }
}
AC:10ms
使用python做法,也是统计词频,代码如下:
class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        scount = collections.Counter(s)
        tcount = collections.Counter(t)
        return scount == tcount
排序
判断两个数字排序之后的结果是否一样即可。
class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        slist = list(s)
        tlist = list(t)
        return sorted(slist) == sorted(tlist)
日期
2016/4/30 13:08:21
 2018 年 11 月 13 日 —— 时间有点快
【LeetCode】242. Valid Anagram 解题报告(Java & Python)的更多相关文章
- LeetCode 242 Valid Anagram 解题报告
		
题目要求 Given two strings s and t , write a function to determine if t is an anagram of s. 题目分析及思路 给出两个 ...
 - 【LeetCode】36. Valid Sudoku 解题报告(Python)
		
[LeetCode]36. Valid Sudoku 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址 ...
 - 【LeetCode】593. Valid Square 解题报告(Python)
		
[LeetCode]593. Valid Square 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地 ...
 - 【LeetCode】120. Triangle 解题报告(Python)
		
[LeetCode]120. Triangle 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址htt ...
 - 22. leetcode 242. Valid Anagram(由颠倒字母顺序而构成的字)
		
22. 242. Valid Anagram(由颠倒字母顺序而构成的字) Given two strings s and t, write a function to determine if t i ...
 - LN : leetcode 242 Valid Anagram
		
lc 242 Valid Anagram 242 Valid Anagram Given two strings s and t, write a function to determine if t ...
 - 【LeetCode】383. Ransom Note 解题报告(Java & Python)
		
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 [LeetCo ...
 - 【LeetCode】575. Distribute Candies 解题报告(Java & Python)
		
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 题目地址:ht ...
 - [leetcode]242. Valid Anagram验证变位词
		
Given two strings s and t , write a function to determine if t is an anagram of s. Example 1: Input: ...
 
随机推荐
- keyboard-interactive authentication with the ssh2 server failed 的SecureCRT报错解决
			
两种解决方法: 一.选定SSH2,选择Authentication,勾选Password,然后将该选项上移,挪到第一位即可 或者: 二.服务器端修改配置 默认情况/etc/ssh/sshd_confi ...
 - 【Redis】过期键删除策略和内存淘汰策略
			
Redis 过期键策略和内存淘汰策略 目录 Redis 过期键策略和内存淘汰策略 设置Redis键过期时间 Redis过期时间的判定 过期键删除策略 定时删除 惰性删除 定期删除 Redis过期删除策 ...
 - day06 模板层
			
day06 模板层 今日内容 常用语法 模板语法传值 模板语法之过滤器 模板语法之标签 自定义过滤器.标签.inclusion_tag(BBS作业用一次) 模板的继承(django前后端结合 那么使用 ...
 - day13 iptables防火墙
			
day13 iptables防火墙 一.防火墙的概述 1.什么是防火墙 防止恶意流量访问的软件就叫做防火墙. 2.防火墙的种类 软件防火墙:firewalld.iptables 硬件防火墙:F5 fi ...
 - LVM磁盘创建与扩容
			
以虚拟机为例 1.在虚拟机上添加新磁盘,点击虚拟机→设置->添加,最后如下图. 2.进入系统fdisk -l,查看当前磁盘信息 [root@master shell]# fdisk -l Dis ...
 - canal从mysql拉取数据,并以protobuf的格式往kafka中写数据
			
大致思路: canal去mysql拉取数据,放在canal所在的节点上,并且自身对外提供一个tcp服务,我们只要写一个连接该服务的客户端,去拉取数据并且指定往kafka写数据的格式就能达到以proto ...
 - 零基础学习java------day2------关键字、标志符、常量、进制键的转换、java中的数据类型、强制类型转换的格式
			
今日内容要求: 1. 了解关键字的概念及特点,了解保留字 2. 熟练掌握标识符的含义,特点,可使用字符及注意事项 3. 了解常量的概念,进制,进制之间相互转换,了解有符号标识法的运算方式 4. 掌握变 ...
 - GPU随机采样速度比较
			
技术背景 随机采样问题,不仅仅只是一个统计学/离散数学上的概念,其实在工业领域也都有非常重要的应用价值/潜在应用价值,具体应用场景我们这里就不做赘述.本文重点在于在不同平台上的采样速率,至于另外一个重 ...
 - Angular中怎样创建service服务来实现组件之间调用公共方法
			
Angular组件之间不能互相调用方法,但是可以通过创建服务来实现公共方法的调用. 实现 创建服务命令 ng g service 服务路径/服务名 比如这里在app/services目录下创建stor ...
 - deque、queue和stack深度探索(上)
			
deque是可双端扩展的双端队列,蓝色部分就是它的迭代器类,拥有四个指针,第一个cur用来指向当前元素,first指向当前buffer头部,last指向当前buffer尾部,node指向map自己当前 ...