博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Valid Anagram from LeetCode
阅读量:5877 次
发布时间:2019-06-19

本文共 1102 字,大约阅读时间需要 3 分钟。

hot3.png

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.

题目比较直观,只需要检查两个字符串中,相同字符是否出现了同样的次数,并且没有多余的字符,即可;

public class Solution {    public boolean isAnagram(String s, String t) {        int[] map = new int[26];        char[] cs = s.toCharArray();        for(char c : cs) {            int x = c - 'a';            map[x] += 1;        }        cs = t.toCharArray();        for(char c : cs) {            int x = c - 'a';            if(map[x] == 0) {                return false;            }            map[x] -= 1;        }        for(int x : map) {            if(x != 0) {                return false;            }        }        return true;    }}
  1. 利用题目中只会出现小写字母,可以使用一个26位的int数组,分别表示a~z的出现的次数;

  2. 先计算s中字符出现的次数,

  3. 然后遍历t,并减少该字符出现的次数;如果遇到某个字符,其出现次数已经被减到了0,那么该字符是在t中多出现了一次,返回false即可;

  4. 遍历完t,再检查一遍是否有字符的出现次数没有被减到0的情况;如果存在,说明该字符在s中出现的次数比在t中多;返回false;

  5. 最后返回true即可;

  6. 时间复杂度为o(n), 空间复杂度为常量;

转载于:https://my.oschina.net/u/922297/blog/486450

你可能感兴趣的文章
strtol 函数用法
查看>>
eclipse内存溢出设置
查看>>
搭建jenkins环境(linux操作系统)
查看>>
VS 2015 GIT操作使用说明
查看>>
上海办理房产税变更
查看>>
每天一个linux命令(52):scp命令
查看>>
CMOS Sensor Interface(CSI)
查看>>
linq中的contains条件
查看>>
HDU 5590 ZYB's Biology 水题
查看>>
memcached 分布式聚类算法
查看>>
言未及之而言,谓之躁;言及之而不言,谓之隐;未见颜色而言,谓之瞽(gǔ)...
查看>>
MYSQL查询一周内的数据(最近7天的)
查看>>
Redis的缓存策略和主键失效机制
查看>>
禁止body滚动允许div滚动防微信露底
查看>>
Xtreme8.0 - Kabloom dp
查看>>
jquery css3问卷答题卡翻页动画效果
查看>>
MDK5.00中*** error 65: access violation at 0xFFFFFFFC : no 'write' permission的一种解决方法
查看>>
Android 集成支付宝支付详解
查看>>
SQL分布式查询、跨数据库查询
查看>>
C#------连接SQLServer和MySQL字符串
查看>>