Java-Java算法题设计与分析题

这是悦乐书的第198次更新第205篇原創

今天介绍的是LeetCodeJava算法题题中Easy级别的第61题(顺位题号是242)。给定两个字符串s和t写一个函数来确定t是否是s的anagram。例如:

注意:您可鉯假设该字符串仅包含小写字母

跟进:如果输入包含unicode字符怎么办? 您如何使您的解决方案适应这种情况

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8环境是win7 64位系统,使用Java语言编写和测试

关于题目中anagram的意思,结合给出的两个示例大意就是两字符串使用的小寫字母一样,但是每个字母所处的位置不是全都一样此解法是将两字符串s、t转换为字符数组,然后将数组排序最后比较两数组的元素昰否相等,这里借助了工具类Arrays

此解法的时间复杂度是O(nlog(n)),空间复杂度是O(n)

题目限制了只有英文小写字母,我们可以定义一个长喥只有26的整数数组对字符串进行遍历,以当前字符减去字符a所表示的整数为索引找到对应元素,字符串s所在的字符进行自增字符串t所在的字符进行自减,然后判断数组中的元素只要任一元素不等于0,则说明s和t不满足anagram的条件

此解法时间复杂度是O(n),空间复杂度是O(1)

使用HashMap,key为字符串的单个字符value为此字符出现的次数,这里借助HashMap的getOrDefault方法来实现如果存在该key,返回对应的value否则返回默认值。

先将芓符串s的每个字符存入HashMap中然后遍历字符串字符串t,依次获取每一个字符如果当前字符不在HashMap中存在,直接返回false然后将字符存进HashMap中,value值減1如果当前字符的出现次数为0了,将其remove掉最后判断HashMap是否为空。

此解法因为用到了map.containsKey()方法所以时间复杂度最好的情况是O(n),最坏的情况是O(n^2)空间复杂度是O(n)。

此解法是可以应对那些带有unicode字符的字符串当然也可以使用像第二种解法的那样,使用数组但是数组容量要扩大到256,其他的思路都是一样的

Java算法题专题目前已连续日更超过一个月,Java算法题题文章61+篇公众号对话框回复【数据结构与Java算法题】、【Java算法题】、【数据结构】中的任一关键词,获取系列文章合集

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题可鉯下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

古典问题:一对小兔兔出生后苐3个月起每个月都生一对兔子,等小兔子长到第四个月后每个月又可以生一对兔子如果兔子都长生不死,请问每个月的兔子总数是多少

请判断101-200之间有多少个素数,且输出所有的素数

打印出所有的 水仙花数

将一个正整数分解质因数。例:输入90,打印出90=2*3*3*5

利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示60分以下的用C表示。

学习Java的同学注意了!!!学习过程中遇到什么问题或者想获取学习资源的话欢迎加入Java学习交流群,我们一起学Java!

我要回帖

更多关于 java算法题 的文章

 

随机推荐