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

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

题目:

 

思路1:

遍历参考的字符S,从中取出一个字符

在需要检查的字符T中,使用indexof来得出位置

如果结果为-1 则直接返回false

如果结果为1,则将该字符从T中删除

 

代码:

public static boolean isAnagram(String s, String t) {        if(s.length() != t.length()){            return false;        }                if(s == t){            return true;        }                for(int i = 0 ;i

运行结果:算法超时。 原因:indexOf的算法应该也是循环遍历,我的算法相当于在循环遍历中嵌入了循环,导致算法超时

 

网上牛人的思路1:使用java内置的方法将字符串转成数组,然后对数组排序,排序后的结果再比较

 

代码:

public static boolean isAnagram(String s, String t) {        char[] arrS = s.toCharArray();        char[] arrT = t.toCharArray();                Arrays.sort(arrS);        Arrays.sort(arrT);                return String.valueOf(arrS).equals(String.valueOf(arrT));            }

 

网上牛人的思路2:

  1. 利用题目中只会出现小写字母,可以使用一个26位的int数组,分别表示a~z的出现的次数;

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

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

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

  5. 最后返回true即可;

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

代码:

public static boolean isAnagram(String s, String t) {        int[] arrCharacterCount = new int[26];        char[] arrS = s.toCharArray();        char[] arrT = t.toCharArray();                for(int i =0;i

 

转载于:https://www.cnblogs.com/savageclc26/p/4857032.html

你可能感兴趣的文章
接口与抽象类的区别(转)
查看>>
转载:分析apk工具aapt的使用,解析其原理
查看>>
如何向视图插入数据
查看>>
注册和策略模式
查看>>
python 列表
查看>>
第七课作业
查看>>
MEAN实践——LAMP的新时代替代方案(下)
查看>>
CentOS7 下安装 Oracle 12c
查看>>
简单介绍AngularJs Filters
查看>>
Dubbo下一站:Apache顶级项目
查看>>
我说分布式事务之最大努力通知型事务
查看>>
挖机全车无动作是什么故障原因引起的?
查看>>
监狱电视系统设计原则及应用场景
查看>>
JDK 源码阅读 :ByteBuffer
查看>>
python面试题
查看>>
vscode 使用小结
查看>>
我的友情链接
查看>>
Isilon整合Hadoop
查看>>
我的友情链接
查看>>
.NET反编译的九大金刚
查看>>