《编程珠玑》字符串包含
时间:2022-07-22
本文章向大家介绍《编程珠玑》字符串包含,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
作者 | 陌无崖
转载请联系授权
字符串包含
题目要求解题思路蛮力轮询排序后轮询
题目要求
给定一个长字符串a和短字符串b,高效判断短字符串b中的所有字符是否都在长字符串中 如:
a := "ABCD"
b := "BAD"//输出true
a := "ABCD"
b := "BAE"//false
a := "ABCD"
b := "AA" //true
解题思路
对于此类题目,通常解决起来并不难,利用Golang中的contains()函数的辅助可以快速编写成功,为了更好的理解,我们不使用contain()函数。
蛮力轮询
轮询短字符串b中的每一个字符,逐个进行和长字符串进行比较,代码如下:
func StringContain(a string, b string) bool {
ar := []rune(a)
br := []rune(b)
// 用短字符串去寻找长字符串进行比较,因此主循环用短字符串进行控制
for i := 0; i < len(br); i++ {
// 定义一个 j 用来每次循环都要保证从 0 开始,j 代表 ar的下表
j := 0
// 循环长字符串
for j = 0; j < len(ar) && br[i] != ar[j]; j++ {
}
// 如果在遍历的过程中遇到不符合情况的字符,则上一个循环会比较到 ar 最后,可用 j 作为判断
// 如果在循环的过程中找到相同字符,第二个循环会提前结束
if j > len(ar) {
return false
}
}
return true
}
排序后轮询
对字符串进行排序,然后再对字符串进行依次轮询,我们使用快速排序的方法,为了简单,我们直接使用Go语言的sort包的Sort方法,需要实现相应的接口,首先我们需要自定义一个类型
type RuneSclice []rune
然后用该类型实现相关接口
func (p RuneSclice) Len() int {
return len(p)
}
func (p RuneSclice) Less(i, j int) bool {
return p[i] < p[j]
}
func (p RuneSclice) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
}
编写判断字符串是否包含的函数
func StringSortContain(a string, b string) bool {
ar := []rune(a)
var ars RuneSclice
ars = ar
br := []rune(b)
var brs RuneSclice
brs = br
// 排序
sort.Sort(ars)
sort.Sort(brs)
// 定义两个指针分别指向ars和brs
pa := 0
pb := 0
for pb < brs.Len() {
// 移动pa指针寻找相同的字符,pb暂时不移动
for (pa < ars.Len()) && (ars[pa] < brs[pb]) {
pa += 1
}
// 说明pa遍历结束仍然未找到,存在不相同的字符,返回false
if pa >= ars.Len() || ars[pa] > brs[pb] {
return false
}
// 说明找到了相同的,开始寻找下一个,pb向后移动
pb += 1
}
return true
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- shell脚本快速入门之----sort、uniq和tr
- 社区开源框架网络模块:ConnectionManager详解
- 搞它!!!Linux--深入介绍firewalld防火墙管理工具
- 搞它!!! 深入介绍iptables防火墙管理工具
- ZooKeeper的十二连问,你顶得了嘛?
- 手把手教你,嘴对嘴传达----Apache虚拟主机配置与应用
- 手把手教你,嘴对嘴传达----Apache的访问控制
- spring框架应用系列二:component-scan自动扫描注册装配
- 手把手教你,嘴对嘴传达------Apache日志管理日志(rotatelogs分割工具、AWStats日志分析)
- 配合JAVA的AJAX使用
- 手把手教你,嘴对嘴传达------Apache网页优化
- jQuery通过Ajax实现请求后台接口数据
- Git常规操作
- 手把手教你,嘴对嘴传达 ----源码编译安装部署LAMP平台(LAMP平台与编译安装详解,Apache,MySQL与PHP源码编译安装,LAMP平台搭建论坛)
- Vue点击切换样式