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的整数,且生成概率一 ...
随机推荐
- Python控制微信,实现聊天机器人
自从微信禁止网页版登陆之后,itchat 库实现的功能也就都不能用了,那现在 Python 还能操作微信吗?答案是:可以! 在Github上有一个项目叫<WeChatPYAPI>可以使用 ...
- 提升vscode的搜索速度
在全局搜索速度上vscode比pycharm要慢不少,尤其是对于我们这种近二十年历史的项目代码来说特别明显,所以这里记录一下我是如何加快vscode的搜索速度的. 官方的搜索建议 https://co ...
- 21.13 Python 实现端口流量转发
端口流量转发(Port Forwarding)是一种网络通信技术,用于将特定的网络流量从一个端口或网络地址转发到另一个端口或地址.它在网络中扮演着一个非常重要的角色,在Python语言中实现端口转发非 ...
- 从嘉手札<09-06-2023>
时常会想 这个世界什么是长久的 我们走在时代的映照下,行色匆匆. 因为别人的悲欢而悲欢,因为自己的局限而挣扎. 晨而得志,暮而踌躇. 青楼梦好,难赋深情. 这个世界有很多的选择. 金钱,酒色,健康,相 ...
- 15.6寸不到1kg!LG Gram超轻薄本发布:13代酷睿加持
出道就以轻薄为主要卖点的LG Gram系列笔记本产品,在今年CES 2023上也迎来更新. 隶属于全新LG Gram UltraSlim产品线的15.6寸新品(15Z90RT),机身重量仅998g,厚 ...
- idea 集成接口测试插件
idea api集成接口测试 日常逼逼叨 相信很多后端开发接口的小伙伴们在开发完成后也会进行简单的测试,可能会用到apifox,postman之类的测试工具,但是up近期发现了一个比较好用的idea插 ...
- Java集合篇之深入解析ArrayList,这六问你答的上来吗?
写在开头 开年第一篇,先祝各位新的一年身体健康,学业有成,事业有成哈,春节期间就是咔咔乱吃,咔咔乱玩,把学习都抛一边子去了,已经9天没有学习了,深深的懊悔,从今天开始,2024年的学习正式开启,一起给 ...
- NC216012 Let'sPlayCurling
题目链接 题目 题目描述 Curling is a sport in which players slide stones on a sheet of ice toward a target area ...
- NC20154 [JSOI2007]建筑抢修
题目链接 题目 题目描述 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严 ...
- linux 测试网络速率
1. ethtool ethtool是很强大的查询网卡(嵌入式称为phy芯片)配置的工具,几乎phy芯片芯片手册寄存器能配置的选项,ethtool都能查询到:嵌入式调试phy芯片的时候经常用到该命令: ...