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的整数,且生成概率一 ...
随机推荐
- React中生命周期的讲解
什么是生命周期? 从出生到成长,最后到死亡,这个过程的时间可以理解为生命周期. React中的组件也是这么一个过程. React的生命周期分为三个阶段:挂载期(也叫实例化期).更新期(也叫存在期).卸 ...
- 你对iframe知道多少
iframe 嵌套第三方页面出现的问题 我们需要通过一个接口获取被嵌套的地址. 然后将改地址赋值给iframe的src中,代码如下 <template> <div> <i ...
- vim 从嫌弃到依赖(23)——最后的闲扯
截止到上一篇文章,关于vim的基础操作都已经讨论完了,这篇我主要就是闲扯,瞎聊.就想毕业论文都有一个致谢一样,这篇我们就作为整个系列的致谢吧 学习vim到底能给我们带来什么 学习vim到底能给我们带来 ...
- 【Jmeter】Request1输出作为Request2输入-后置处理器
[Jmeter]基础介绍-详细 接上文,继续介绍Jmeter,本文关注点为如何解决上文中提到的第一个问题,即: 需要实现Request1的返回作为Request2的RequestBody或Header ...
- Cheat Engine 官方教程汉化
CE修改器官方教程汉化版,区别于前款教程,官方教程中使用的是Tutorial64位程序,如下是经过翻译后的官方文档. 第一步:欢迎 当教程启动时,您应该会看到类似的东西,您只需在阅读帮助文本后单击&q ...
- 随机 Transformer
在这篇博客中,我们将通过一个端到端的示例来讲解 Transformer 模型中的数学原理.我们的目标是对模型的工作原理有一个良好的理解.为了使内容易于理解,我们会进行大量简化.我们将减少模型的维度,以 ...
- Data Encryption Standard算法:历经考验的经典加密方案
在当今数字化时代,数据安全是一个至关重要的问题.为了保护敏感数据的机密性和完整性,加密算法成为了数据保护的关键技术.其中,DES(Data Encryption Standard)算法作为一种经典的对 ...
- Linux 列出文件的绝对路径
1.使用ls中列出文件的绝对路径ls | sed "s:^:`pwd`/:" 2.列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归find $PWD -maxd ...
- Socket.D 开源输传协议的集群转发特性
1.简介 Socket.D 是基于"事件"和"语义消息""流"的网络应用层协议.底层可以依赖 TCP.UDP.KCP.WebSocket 等 ...
- JS Leetcode 1370. 上升下降字符串 题解分析,桶排序与charCodeAt fromCharCode妙用
壹 ❀ 引 本题来自LeetCode1370. 上升下降字符串,难度简单,是一道考察对于字符串遍历熟练度的题目,题目描述如下: 给你一个字符串 s ,请你根据下面的算法重新构造字符串: 从 s 中选出 ...