我是靠谱客的博主 危机牛排,最近开发中收集的这篇文章主要介绍中判断字符串是否为空_LeetCode基础算法题第87篇:判断两个字符串是否是字母异位词...问题描述:示例:C语言实现:python语言的实现:Java语言的实现:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

0440876cb310c2d700216f419d647f52.png

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。

目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。

初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式聊到大数据框架,从大数据聊到人工智能,... ...。

如果有任何问题可以在文章后评论或者私信给我。

我会持续分享下去,敬请您的关注。

LeetCode 242. 有效的字母异位词(Contains Duplicate)

问题描述:

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。

注:

  1. 假设字符串只包含小写字母。
  2. 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

示例:

4d32ad1e6693f43a394c6f43c10dc28f.png

C语言实现:

解这道题的方法有很多,比如可以对s和t进行排序后再比较,或者构建一个map统计字符出现的次数等等。

我用的是统计次数方法,首先这种方法,时间复杂度比较好,只需要O(n),第二对于有限字符,空间复杂度是常数。

代码如下:

0d4446e4250a2949537b18b82d301570.png

按照题目的描述,字符串仅包含小写字母。所以我们可以构建一个长度是26的数组count来统计所有小写字幕出现的次数。

如果s和t长度不等,那么一定返回false。否则我们同时遍历s和t,s中出现的字符在count中对应的位置加1,t中出现的字符在count中对应的位置减1,这样,如果s和t是异位词,那么最后遍历结束,每个字母的的统计次数将依然都是0。

c69a6b092f43e84af8e21578cdcb42da.png

python语言的实现:

可以直接对s和t进行排序然后比较排序后的字符串是否相等,但是跑下来的结果效率不太好,然后我将s和t转换成两个Counter对象,比较两个对象,这种算法结果还可以,也很简洁。

代码如下:

cb55e511346b047cef837a9abc02750e.png
11483c4452ba5a607c1cb6b4b65e1a26.png

Java语言的实现:

Java的实现和C语言的实现基本相同。

代码如下:

f09ed591f213b2b625b526b1388bb93e.png
4201483b8cc9adc205f171917c5c7006.png

最后我们再说说unicode的问题,首先python不用考虑这个问题,因为python3的字符串本来就是unicode编码的。

对于这道题我觉得,即使是unicode也没什么关系,以utf-8为例,前127个字符是和ascii码兼容的,而这127个字符就包含所有的小写英文字母。

最后

以上就是危机牛排为你收集整理的中判断字符串是否为空_LeetCode基础算法题第87篇:判断两个字符串是否是字母异位词...问题描述:示例:C语言实现:python语言的实现:Java语言的实现:的全部内容,希望文章能够帮你解决中判断字符串是否为空_LeetCode基础算法题第87篇:判断两个字符串是否是字母异位词...问题描述:示例:C语言实现:python语言的实现:Java语言的实现:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部