Golang字符串变位词示例详解
实现目标
本文的目标是写出一个函数 anagram(s, t) 去判断两个字符串是否是颠倒字母顺序构成的。下面话不多说了,来一起看看详细的介绍吧。
GoLang 实现
func solution(s , t string)bool{ if s == t { return true } length := len(s) if length != len(t) { return false } //' ' 32 --> ~ 126 const MAX_ASCII int= 94 const SPACE_INDEX rune = 32 numbers := [MAX_ASCII]int{} sRune := []rune(s) tRune :=[]rune(t) for i := 0 ; i < length ; i++ { index := tRune[i] - SPACE_INDEX numbers[index]++ index = sRune[i] - SPACE_INDEX numbers[index]-- } for i := 0 ; i < MAX_ASCII / 2 ; i++{ mergeSize := numbers[i] if mergeSize != 0 || mergeSize != numbers[MAX_ASCII - 1 - i]{ return false } } return true }
其中关键点1 :
定义保存最后判断两个字符串是否相同的 长度的取值:
根据ASCII 表可以知道:
第一个单字符 ' ' 的10 进制值位32 , 最后一个单字符 '~' 10进制值位 126 , 得到之间的差值为 94 ,
这里预测每个字符都被使用到了, 所以长度直接定义为 94了.
Java 实现 和上面类似:
public boolean anagram(String s, String t) { if (s == null || t == null || s.length() ==0 || s.length() != t.length()){ return false; } if (s.equals(t))return true; final int MAX_ASCII = 94; final char SPACE_INDEX = ' '; int[] numbers = new int[MAX_ASCII]; int length = s.length(); char[] sCharArray = s.toCharArray(); char[] tCharArray = t.toCharArray(); for(int i = 0 ; i< length ; i++){ int index = sCharArray[i] - SPACE_INDEX; numbers[index]++; index = tCharArray[i] - SPACE_INDEX; numbers[index]--; } for (int i =0 ; i < MAX_ASCII / 2 ; i++ ) { int mergeSize = numbers[i]; if ( mergeSize != 0 || mergeSize != numbers[MAX_ASCII - 1 - i]){ return false; } } return true; }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
Go语言截取字符串函数用法
本文实例讲述了Go语言截取字符串函数用法.分享给大家供大家参考.具体如下: 复制代码 代码如下: func Substr(str string, start, length int) string { rs := []rune(str) rl := len(rs) end := 0 if start < 0 { start = rl - 1 + start } end = start + length
-
Go语言常用字符串处理方法实例汇总
本文实例汇总了Go语言常用字符串处理方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: package main import ( "fmt" "strings" //"unicode/utf8" ) func main() { fmt.Println("查找子串是否在指定的字符串中") fmt.Println(" Contains 函数的用法")
-
Go语言转换所有字符串为大写或者小写的方法
本文实例讲述了Go语言转换所有字符串为大写或者小写的方法.分享给大家供大家参考.具体如下: Go语言的string模块包含了ToLower和ToUpper函数,用于将字符串转换成小写和大写 复制代码 代码如下: package main import ( "fmt" "strings" ) func main() { fmt.Println(strings.ToUpper("hello world")) } 希望本文所述对大家的Go语
-
Go语言写入字符串到文件的方法
本文实例讲述了Go语言写入字符串到文件的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import "fmt" import "os" func main() { fileName := "test.dat" dstFile,err := os.Create(fileName) if err!=nil{ fmt.Println(err.Error())
-
浅谈Go语言中字符串和数组
go语言里边的字符串处理和PHP还有java 的处理是不一样的,首先申明字符串和修改字符串 复制代码 代码如下: package main import "fmt" var name string //申明一个字符串 var emptyname string = "" //申明一个空字符串 func main() { //申明多个字符串并且赋值 a, b, v := "hello", "word", &
-
Go语言中字符串的查找方法小结
1.func Contains(s, substr string) bool这个函数是查找某个字符是否在这个字符串中存在,存在返回true 复制代码 代码如下: import ( "fmt" "strings" ) func main() { fmt.Println(strings.Contains("widuu", "wi")) //true fmt.Println(strings.Contains("wi
-
Go语言声明一个多行字符串的变量
Go如何声明一个多行字符串的变量?使用 ` 来包含即可. package main import ( "fmt" ) func main() { str := `hello world v2.0` fmt.Println(str) } Demo:http://play.golang.org/p/BOL8_SwQ0D 以上所述就是本文的全部内容了,希望大家能够喜欢.
-
Go语言编程中字符串切割方法小结
1.func Fields(s string) []string,这个函数的作用是按照1:n个空格来分割字符串最后返回的是 []string的切片 复制代码 代码如下: import ( "fmt" "strings" ) func main() { fmt.Println(strings.Fields("hello widuu golang")) //out [hello widuu golang] } 2.func FieldsFun
-
Golang字符串变位词示例详解
实现目标 本文的目标是写出一个函数 anagram(s, t) 去判断两个字符串是否是颠倒字母顺序构成的.下面话不多说了,来一起看看详细的介绍吧. GoLang 实现 func solution(s , t string)bool{ if s == t { return true } length := len(s) if length != len(t) { return false } //' ' 32 --> ~ 126 const MAX_ASCII int= 94 const SPAC
-
Go语言中的字符串处理方法示例详解
1 概述 字符串,string,一串固定长度的字符连接起来的字符集合.Go语言的字符串是使用UTF-8编码的.UTF-8是Unicode的实现方式之一. Go语言原生支持字符串.使用双引号("")或反引号(``)定义. 双引号:"", 用于单行字符串. 反引号:``,用于定义多行字符串,内部会原样解析. 示例: // 单行 "心有猛虎,细嗅蔷薇" // 多行 ` 大风歌 大风起兮云飞扬. 威加海内兮归故乡. 安得猛士兮守四方! ` 字符串支持转义
-
golang字符串本质与原理详解
目录 一.字符串的本质 1.字符串的定义 2.字符串的长度 3.字符与符文 二.字符串的原理 1.字符串的解析 2.字符串的拼接 3.字符串的转换 总结 一.字符串的本质 1.字符串的定义 golang中的字符(character)串指的是所有8比特位字节字符串的集合,通常(非必须)是UTF-8 编码的文本. 字符串可以为空,但不能是nil. 字符串在编译时即确定了长度,值是不可变的. // go/src/builtin/builtin.go // string is the set of al
-
Golang分布式应用之Redis示例详解
目录 正文 分布式锁 运行测试 分布式过滤器 运行测试 分布式限流器 运行测试 其他 正文 Redis作是一个高性能的内存数据库,常被应用于分布式系统中,除了作为分布式缓存或简单的内存数据库还有一些特殊的应用场景,本文结合Golang来编写对应的中间件. 本文所有代码见github.com/qingwave/go… 分布式锁 单机系统中我们可以使用sync.Mutex来保护临界资源,在分布式系统中同样有这样的需求,当多个主机抢占同一个资源,需要加对应的“分布式锁”. 在Redis中我们可以通过s
-
Golang信号量设计实现示例详解
目录 开篇 信号量 semaphore 扩展库实现 Acquire Release TryAcquire 总结 开篇 在我们此前的文章 Golang Mutex 原理解析 中曾提到过,Mutex 的底层结构包含了两个字段,state 和 sema: type Mutex struct { state int32 sema uint32 } state 代表互斥锁的状态,比如是否被锁定: sema 表示信号量,协程阻塞会等待该信号量,解锁的协程释放信号量从而唤醒等待信号量的协程. 这个 sema
-
Golang中的参数传递示例详解
前言 本文主要给大家介绍了关于Golang参数传递的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 关于参数传递,Golang文档中有这么一句: after they are evaluated, the parameters of the call are passed by value to the function and the called function begins execution. 函数调用参数均为值传递,不是指针传递或引用传递.经测试引申出来,
-
Java字符串常量池示例详解
为什么会有常量池的概念? 不知道小伙伴们是否有思考过这个问题? 没有思考也无所谓,小编在这里类比一下,大家就会清晰了.什么是池? 我们听的最多的池,应该是数据库连接池. 为什么会有数据库连接池,其实就是为了节省资源,提高性能,防止重复创建连接,避免占用内存和网络资源. 常量池其实就是跟数据库连接池的目的都是一样的.那么他是如何实现的呢? 因为常量池是JVM的概念,源码我们也不好看,所以我们还以连接池来类比. 池化的目标就是缓存和管理 稍微提一点池化的概念,其实就是对资源做一个包装,在包装层来加一
-
Python网络爬虫中的同步与异步示例详解
一.同步与异步 #同步编程(同一时间只能做一件事,做完了才能做下一件事情) <-a_url-><-b_url-><-c_url-> #异步编程 (可以近似的理解成同一时间有多个事情在做,但有先后) <-a_url-> <-b_url-> <-c_url-> <-d_url-> <-e_url-> <-f_url-> <-g_url-> <-h_url-> <--i_ur
-
基于gin的golang web开发:路由示例详解
Gin是一个用Golang编写的HTTP网络框架.它的特点是类似于Martini的API,性能更好.在golang web开发领域是一个非常热门的web框架. 启动一个Gin web服务器 使用下面的命令安装Gin go get -u github.com/gin-gonic/gin 在代码里添加依赖 import "github.com/gin-gonic/gin" 快速启动一个Gin服务器的代码如下 package main import "github.com/gin-
-
golang程序进度条实现示例详解
目录 引言 原理 上才艺 调用代码 QPS表达任务处理速度 知识点总结 引言 最近在工作中写一个批处理脚本,令人抓狂的是每次都不知道脚本要跑到啥时候结束,于是想到给程序添加个进度条. 逛了一圈,没找到特别趁手的轮子,本着有手就行的原则,今天简单地给大家撸一个终端进度条. 原理 终端进度条打印的原理是通过输入\r将光标位置移动到当前行的行首,重新打印一份进度信息. 如果是使用\n,则光标会另起一行打印信息. 上才艺 首先从核心功能出发,进度条要告诉我的信息有 一共要完成多少任务 现在完成了多少任务
随机推荐
- Java中的反射机制详解
- Struts2 $,#,%详解及实例代码
- 纯JS焦点图特效实例(可一个页面多用)
- js propertychange和oninput事件
- python实现逆波兰计算表达式实例详解
- 详解C语言位域的使用与注意事项
- MySQL Proxy的安装及基本命令使用教程
- MySQL中的alter table命令的基本使用方法及提速优化
- Bootstrap Table的使用总结
- 初识NodeJS服务端开发入门(Express+MySQL)
- 批处理BAT加强函数代码使用说明第1/3页
- C#实现漂亮的数字时钟效果
- 用JQuery调用Session的实现代码
- javascript父、子页面交互技巧总结
- 虚拟服务器实现方法(动态均衡)
- 简述C语言中system()函数与vfork()函数的使用方法
- C#中if语句使用概述
- 详解webpack提取第三方库的正确姿势
- Vue2.0结合webuploader实现文件分片上传功能
- C#如何从byte[]中直接读取Structure实例详解