有效的字母异位词的golang实现
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
输入: s = "anagram", t = "nagaram"
输出: true
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母
首先看到题目的意思就是说两个字符串的字母一样,只是位置可以不一样
而且说明也说了,只包含小写字母。
那我们可以通过对两个字符串里面的字符进行排序,如果排序后的两个字符串是一样的,那么就可以说这两个字符串是有效的
// 比较两个排好序的字符串是不是一样
func isAnagram(s string, t string) bool {
var ss []string
var ts []string
for _, c := range s {
ss = append(ss, string(c))
}
for _, c := range t {
ts = append(ts, string(c))
}
sort.Strings(ss)
sort.Strings(ts)
return reflect.DeepEqual(ss, ts)
// return stringSliceEqualBCE(ss, ts)
} func stringSliceEqualBCE(a, b []string) bool {
if len(a) != len(b) {
return false
} if (a == nil) != (b == nil) {
return false
} b = b[:len(a)]
for i, v := range a {
if v != b[i] {
return false
}
} return true
}
因为题目说了,字符串只包含小写字母,那我们就可以放心地对字符串进行foreach了
但是这个写法耗时非常严重。
- 两个for,O(n)
- 两个排序,O(Nlogn)
- 乍看起来是一个O(Nlogn)的时间复杂度,但是几个加起来,时间就非常不乐观了
还有另外一种方法就是,使用map把字符串的字符出现个数保存起来
// 用两个字典分别把两个字符串的字符出现个数保存起来
func isAnagram1(s string, t string) bool {
var sMap = make(map[rune]int)
var tMap = make(map[rune]int) for _, c := range s {
sMap[c] = sMap[c] +
}
for _, c := range t {
tMap[c] = tMap[c] +
}
return reflect.DeepEqual(sMap, tMap)
}
这个写法是一个O(N)时间复杂度的写法,时间比上面那个写法提升了不少
说明:
你可以假设字符串只包含小写字母
有效的字母异位词的golang实现的更多相关文章
- C#版 - Leetcode49 - 字母异位词分组 - 题解
C#版 - Leetcode49 - 字母异位词分组 - 题解 Leetcode49.Group Anagrams 在线提交: https://leetcode.com/problems/group- ...
- [Swift]LeetCode49. 字母异位词分组 | Group Anagrams
Given an array of strings, group anagrams together. Example: Input: ["eat", "tea" ...
- [Swift]LeetCode242. 有效的字母异位词 | Valid Anagram
Given two strings s and t , write a function to determine if t is an anagram of s. Example 1: Input: ...
- [Swift]LeetCode438. 找到字符串中所有字母异位词 | Find All Anagrams in a String
Given a string s and a non-empty string p, find all the start indices of p's anagrams in s. Strings ...
- Leetcode 242.有效的字母异位词 By Python
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram" ...
- LeetCode(49): 字母异位词分组
Medium! 题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", ...
- LeetCode--242--有效的字母异位词
问题描述: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagara ...
- Leetcode题库——49.字母异位词分组【##】
@author: ZZQ @software: PyCharm @file: leetcode49_groupAnagrams.py @time: 2018/11/19 13:18 要求:给定一个字符 ...
- 【leetcode 简单】 第七十题 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram" ...
随机推荐
- MySQL忘记密码后找回密码
停止mysql服务 在mysql配置文件里[mysqld]下添加skip-grant-tables 3.重启服务,进入mysql 4.修改密码: MariaDB [mysql]> update ...
- 『高次同余方程 Baby Step Giant Step算法』
高次同余方程 一般来说,高次同余方程分\(a^x \equiv b(mod\ p)\)和\(x^a \equiv b(mod\ p)\)两种,其中后者的难度较大,本片博客仅将介绍第一类方程的解决方法. ...
- 『2019/3/19 USACO测试 反思与总结』
2019/3/8 USACO测试 这是第三次考试了,不过这一次没有上一次考得好,也算是比较失误的,有一道题思路对但是写挂了. 还是看一下试题安排: 题号 试题分组 考察算法 思维难度 代码难度 1 银 ...
- Java8虚拟机内存模型
1. Java虚拟机运行时数据区 在JDK1.8之前,JVM运行时数据区分为堆.虚拟机栈.本地方法栈.方法区.程序计数器.如下图所示: 虚拟机栈:线程私有,随线程创建而创建.栈里面是一个一个“栈帧” ...
- Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享
小伙伴们好久不见!最近略忙,博客写的有点少,嗯,要加把劲.OK,今天给大家带来一个JavaWeb中常用的架构搭建,即Nginx+Tomcat搭建服务集群,然后通过Spring Session+Redi ...
- SpringBoot入门教程(七)整合themeleaf+bootstrap
Thymeleaf是用于Web和独立环境的现代服务器端Java模板引擎.Thymeleaf的主要目标是将优雅的自然模板带到您的开发工作流程中—HTML能够在浏览器中正确显示,并且可以作为静态原型,从而 ...
- Java基础13:反射详解
本节主要介绍Java反射的原理,使用方法以及相关的技术细节,并且介绍了关于Class类,注解等内容. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech ...
- MHA非root用户搭建测试
最近一直在瞎搬砖,最大的感触是运维工作难做.不过废话不多说,最近被分配了一项比较有意思的task,尝试着非root用户搭建MHA并测试下能否成功漂移,以下是两天测试和文档编写的成果,分享给各位看客,欢 ...
- leetcode — binary-tree-inorder-traversal
import java.util.Arrays; import java.util.Stack; import java.util.TreeMap; /** * * Source : https:// ...
- Servlet主要相关类核心类 容器调用的过程浅析 servlet解读 怎么调用 Servlet是什么 工作机制
WEB简介 Web项目 是 B/S结构 浏览器/服务器模式的 浏览器发起请求,服务器作出响应 请求的发起和响应使用HTTP协议进行通讯 所谓协议也就是一种固定格式 而Socket是应用 ...