有效的字母异位词的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" ...
随机推荐
- .NET Core脚本工具dotnet-script
什么是dotnet-script "dotnet-script"是github上一个开源的.net core global tool, 项目地址https://github.com ...
- 【干货】Chrome插件(扩展)开发全攻略
写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...
- Linux~yum命令安装程序
当我们使用linux的最小安装时,很多系统程序都没有被安装,这时,我们可以通过yum命令安装指定的包包,当然前提是你的linux处于联网状态的,下面说一下yum的用法 1 显示程序列表(联网的) yu ...
- cache2go - cachetable源码分析
今天我们来看cachetable.go这个源码文件,除了前面介绍过的主要数据结构CacheTable外还有如下2个类型: 下面先看剩下2个类型是怎么定义的: CacheItemPair非常简单,注释一 ...
- java开发知识IO知识之输入输出流以及文件
目录 java开发知识IO知识之输入输出流以及文件 一丶流概述 二丶输入流讲解 InputStream类. 1. 输入流以及类层次结构 2.文件操作.使用输入流读取 三丶输出流 OutputStrea ...
- AppBoxFuture(四). 随需而变-Online Schema Change
需求变更是信息化过程中的家常便饭,而在变更过程中如何尽可能小的影响在线业务是比较头疼的事情.举个车联网监控的例子:原终端设备上传车辆的经纬度数据,新的终端设备支持同时上传速度数据,而旧的车辆状态表 ...
- 基于Dockerfile镜像制作的基本操作
一.使用Dockerfile制作镜像 前面的博客中已经介绍了如何基于容器制作镜像,此方法的原理是使用一个正在运行的容器,根据生产所需进行配置更改等操作后,使其满足生产环境,再将这个容器打包制作为镜像, ...
- xshell连接虚拟机详解--技术流ken
xshell连接虚拟机 第一步:网络模式更改为桥接模式 第二步:重启网络 [root@ken1 ~]# systemctl restart network 第三步:获取IP地址 输入命令ip a 第四 ...
- 为什么我的gridview.DataKeys.count总是为零?并提示索引超出范围
第一个原因 你没有设置DataKeyNames属性, 第二个原因 你的DataSource是NUll值 第二个原因 DataKeyNames字段区分大小写
- Java多线程编程实战读书笔记(一)
多线程的基础概念本人在学习多线程的时候发现一本书——java多线程编程实战指南.整理了一下书中的概念制作成了思维导图的形式.按照书中的章节整理,并添加一些个人的理解.