2024-03-02:用go语言,一个句子是由一些单词与它们之间的单个空格组成, 且句子的开头和结尾没有多余空格, 比方说,“Hello World“ ,“HELLO“ ,“hello world h
2024-03-02:用go语言,一个句子是由一些单词与它们之间的单个空格组成,
且句子的开头和结尾没有多余空格,
比方说,"Hello World" ,"HELLO" ,"hello world hello world" 都是句子,
每个单词都 只 包含大写和小写英文字母,
如果两个句子 sentence1 和 sentence2,
可以通过往其中一个句子插入一个任意的句子(可以是空句子)而得到另一个句子,
那么我们称这两个句子是 相似的。
比方说,sentence1 = "Hello my name is Jane" ,
且 sentence2 = "Hello Jane"。
我们可以往 sentence2 中 "Hello" 和 "Jane" 之间插入 "my name is",
得到 sentence1。
给你两个句子 sentence1 和 sentence2,
如果 sentence1 和 sentence2 是相似的,请你返回 true ,否则返回 false。
输入:sentence1 = "My name is Haley", sentence2 = "My Haley"。
输出:true。
答案2024-03-02:
来自左程云。
大体步骤如下:
1.将句子sentence1和sentence2以空格为分隔符拆分成单词列表w1和w2。
2.初始化变量i、j,分别表示句子开头相似部分的单词数量和句子结尾相似部分的单词数量。
3.循环比较w1和w2中的单词,直到遇到第一个不同的单词或其中一个句子的单词已经全部比较完毕。
4.循环结束后,得到i的值,表示句子开头相似部分的单词数量。
5.从句子结尾开始,循环比较w1和w2中的单词,直到遇到第一个不同的单词或其中一个句子的单词已经全部比较完毕。
6.循环结束后,得到j的值,表示句子结尾相似部分的单词数量。
7.返回i+j是否等于w1和w2中较小的单词数量,如果相等,则说明两个句子是相似的,返回true;否则返回false。
时间复杂度分析:
拆分句子的时间复杂度为O(n),其中n为句子中单词的个数。
比较单词的时间复杂度为O(k),其中k为句子中相同的单词数量。
总的时间复杂度为O(n + k)。
额外空间复杂度分析:
使用了两个字符串列表w1和w2来存储拆分后的单词,空间复杂度为O(n),其中n为句子中单词的个数。
使用了几个整数变量和常量,空间复杂度可以忽略不计。
总的额外空间复杂度为O(n)。
go完整代码如下:
package main
import (
"strings"
"fmt"
)
func areSentencesSimilar(sentence1 string, sentence2 string) bool {
w1 := strings.Split(sentence1, " ")
w2 := strings.Split(sentence2, " ")
i, j, n1, n2 := 0, 0, len(w1), len(w2)
for i < n1 && i < n2 && w1[i] == w2[i] {
i++
}
for n1-j > i && n2-j > i && w1[n1-1-j] == w2[n2-1-j] {
j++
}
return i+j == min(n1, n2)
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func main() {
sentence1 := "My name is Haley"
sentence2 := "My Haley"
result := areSentencesSimilar(sentence1, sentence2)
fmt.Println(result)
}

python完整代码如下:
# -*-coding:utf-8-*-
def areSentencesSimilar(sentence1, sentence2):
w1 = sentence1.split(" ")
w2 = sentence2.split(" ")
i, j, n1, n2 = 0, 0, len(w1), len(w2)
while i < n1 and i < n2 and w1[i] == w2[i]:
i += 1
while n1 - j > i and n2 - j > i and w1[n1 - 1 - j] == w2[n2 - 1 - j]:
j += 1
return i + j == min(n1, n2)
def min(a, b):
if a < b:
return a
return b
sentence1 = "My name is Haley"
sentence2 = "My Haley"
result = areSentencesSimilar(sentence1, sentence2)
print(result)

2024-03-02:用go语言,一个句子是由一些单词与它们之间的单个空格组成, 且句子的开头和结尾没有多余空格, 比方说,“Hello World“ ,“HELLO“ ,“hello world h的更多相关文章
- 《30天自制操作系统》笔记(02)——导入C语言
<30天自制操作系统>笔记(02)——导入C语言 进度回顾 在上一篇,记录了计算机开机时加载IPL程序(initial program loader,一个nas汇编程序)的情况,包括IPL ...
- CISCO运维记录之4507设备升级IOS(Version 03.03.02.SG版本存在bug)
CISCO运维记录之3650堆叠设备升级IOS(Version 03.03.02.SG版本存在bug) 1. 问题详情 思科45系列交换机使用Catalyst 4500 L3 Switch Softw ...
- c语言一个处理文本文件的例子
功能 读取一个文本文件,将其中的文本按规则转换为int数据,然后对数据进行处理.文本的格式类似36 565 233... 代码 #include <stdio.h> #include &l ...
- java学习第02天(语言基础组成:关键字、标识符、注释、常量和变量)
Java语言基础组成 1. 关键字 就是指的一些单词,这些单词被赋予了特殊的java含义,就不再叫单词了. 例如: class Demo{ public static void main(String ...
- 三:Storm设计一个Topology用来统计单词的TopN的实例
Storm的单词统计设计 一:Storm的wordCount和Hadoop的wordCount实例对比
- 第六章 第一个Linux驱动程序:统计单词个数
现在进入了实战阶段,使用统计单词个数的实例让我们了解开发和测试Linux驱动程序的完整过程.第一个Linux驱动程序是统计单词个数. 这个Linux驱动程序没有访问硬件,而是利用设备文件作为介质与应用 ...
- fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”? 解决方法
错误描述: fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "StdAfx.h"”? 错误分析: 此错误发 ...
- 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?
在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "StdAfx.h"”? 右键选择该文件.cpp格式的->属性->预编译头,→ 不使用预编译 ...
- java语言实现对程序设计语言源文件统计字符数、单词数、行数及其他拓展功。
本次作业Github项目地址:https://github.com/YiChenglong2018/WordCount 一.项目简介 本项目的需求可以概括为:对程序设计语言源文件统计字符数.单词数.行 ...
- 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?
题目:给定一个函数rand()能产生1到n之间的等概率随机数,问如何产生1到m之间等概率的随机数? 先把问题特殊化,例如原题变为给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一 ...
随机推荐
- js中for in和for of详细讲解
for in的详细讲解, for in遍历数组的毛病 1.index索引为字符串型数字,不能直接进行几何运算. 2.遍历顺序有可能不是按照实际数组的内部顺序 3.使用for in会遍历数组[所有的可枚 ...
- Python 潮流周刊第 37 期(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- Django笔记七之ManyToMany和OneToOne介绍
本文首发于本人微信公众号:Hunter后端 原文链接:Django笔记七之ManyToMany和OneToOne介绍 ManyToMany 是一种多对多的关系,在用途和使用方法上和外键 Foreign ...
- 手撕Vue-数据驱动界面改变中
经过上一篇的介绍,已经实现了观察者模式的基本内容,接下来要完成的就是将上一篇的发布订阅模式运用到 Nue 中,实现数据驱动界面改变. 在监听数据变化的章节当中,根据指定的区域和数据去编译渲染界面 这个 ...
- Go语言的原子操作atomic
atomic 原子操作 Go中原子操作的支持 CompareAndSwap(CAS) Swap(交换) Add(增加或减少) Load(原子读取) Store(原子写入) 原子操作与互斥锁的区别 at ...
- C/C++ Npcap包实现数据嗅探
npcap 是Nmap自带的一个数据包处理工具,Nmap底层就是使用这个包进行收发包的,该库,是可以进行二次开发的,不过使用C语言开发费劲,在进行渗透任务时,还是使用Python构建数据包高效,这东西 ...
- 《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(1)-初识Wireshark
1.简介 前边已经介绍过两款抓包工具,应该是够用了,也能够处理在日常工作中遇到的问题了,但是还是有人留言让宏哥要讲解讲解Wireshark这一款抓包工具,说实话宏哥之前也没有用过这款工具,只能边研究边 ...
- Typecho文章采集发布插件-免费下载
分享一款可以自动采集网页文章,并发布到typecho博客网站的typecho采集发布插件,支持简数采集器,火车头数据采集器,八爪鱼文章采集器,后羿采集器等. Typecho采集发布插件使用方法如下: ...
- go语言中 字符串 多行字符串 转义
- SpringBoot中单元测试如何对包含AopContext.currentProxy()的方法进行测试
今天在工作中遇到一个问题,一个Service类中有一个方法,其中使用了 AopContext.currentProxy() 去访问自身的函数,例如 int result = ((OrderServic ...