首页 > 其他分享 >2024-03-02:用go语言,一个句子是由一些单词与它们之间的单个空格组成, 且句子的开头和结尾没有多余空格, 比方说,“Hello World“ ,“HELLO“ ,“hello world h

2024-03-02:用go语言,一个句子是由一些单词与它们之间的单个空格组成, 且句子的开头和结尾没有多余空格, 比方说,“Hello World“ ,“HELLO“ ,“hello world h

时间:2024-03-02 12:22:06浏览次数:28  
标签:单词 w1 空格 sentence1 sentence2 go 句子 w2

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:

来自左程云

灵捷3.5

大体步骤如下:

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)

在这里插入图片描述

标签:单词,w1,空格,sentence1,sentence2,go,句子,w2
From: https://www.cnblogs.com/moonfdd/p/18048478

相关文章

  • Go语言的100个错误使用场景(55-60)|并发基础
    目录前言8.并发基础8.1混淆并发与并行的概念(#55)8.2认为并发总是更快(#56)8.3分不清何时使用互斥锁或channel(#57)8.4不理解竞态问题(#58)8.5不了解工作负载类型对并发性能的影响(#59)8.6不懂得使用Gocontexts(#60)小结前言大家好,这里是白泽。《Go语言的100个错误以及如何避免》......
  • Go - io.Reader.Read
     funcmain(){readToSlice(strings.NewReader("abcdefghijklmn"))fmt.Printf("\n--------------------------------------\n\n")readToSubSlice(strings.NewReader("abcdefghijklmn"))}funcreadToSlice(rio.Reader)......
  • 感觉不错 Feel Good 和 长方形(单调栈的应用)
    感觉不错FeelGood和长方形(单调栈的应用)题目描述给出正整数\(n\)和一个长度为\(n\)的数列\(a\),要求找出一个子区间\([l,r]\),使这个子区间的数字和乘上子区间中的最小值最大。形式化的,要求找出\([l,r]\)使得:\[\left(\sum\limits_{i=l}^{r}a_i\right)\times\min\lim......
  • Codeforces 839E Mother of Dragons
    令\(s_u\)为点\(u\)分配到的权值。结论:最后选出来有权值的肯定是一个最大团。考虑反证,如果\(x,y\)间没有连边,则\(x,y\)的贡献是独立的,若\(\sum\limits_{(u,x)\inE}s_u\ge\sum\limits_{(v,y)\inE}s_v\),那么就可以把\(s_y\)给\(s_x\),否则把\(s_x\)给\(s_......
  • Go中的方法
    基本介绍golang中的方法是作用在指定的数据类型上的(和数据类型绑定的),因此自定义类型都可以用方法,而不仅仅是struct。方法的声明和调用typeAstruct{Numint}func(aA)test(){fmt.Println(a.Num)}func(aA)test(){}表示A结构体有一个方法,方法名字为test(aA......
  • golang中员工分组分页获取的一种方案
    在业务中,有一个场景,A系统需要提供一个接口,返回组织架构信息,供B系统入库,即B系统的组织架构是从A系统中同步过来的。这个场景下存在一个小问题,B系统期望A系统按照组织树层序遍历分页返回。这样B系统就不需要担心新增组织时找不到父级组织了。那么A系统要怎么做呢?方案1:在数据库......
  • go中的结构体struct
    结构体的介绍:golang支持面向对象,是基于struct来实现OOP特性的,相当于Java中的class类。golang去掉了传统的oop语言的继承,方法重载,构造函数和析构函数,隐藏的this指针。golang仍然有面向对象编程的继承,封装和多态的特性。但是golang的继承没有extends关键字,继承是通过匿名字段来......
  • 深入浅出Go语言:泛型入门指南
    深入浅出Go语言:泛型入门指南原创 麻凡 麻凡 2024-03-0109:00 湖南 听全文随着Go1.18版本的发布,泛型正式成为了Go语言的一部分。泛型为Go开发者带来了更强大的类型抽象能力,允许我们编写更加灵活和可复用的代码。本文将带你了解Go泛型的基础知识,让你快速上手这一新特......
  • 为什么django3+版本不能用sql_server.pyodbc只能用mssql
    之前使用的是django2.2.2,后来换到django3.2后发现在settings中进行数据库链接sqlserver的时候sql_server.pyodbc用不了,随后切换到mssql才行,后来查阅后发现是版本问题导致 Django3.2本身不包含对SQLServer的直接支持。默认情况下,Django支持几种主流的数据库后端,例如SQLi......
  • 解决celery与django结合后,分别启动celery和django的进程同时调用定时任务的问题
     django中引入celery后发现在代码中写如下这样的定时任务,启动celery和django的工程后,他们都会调用这个定时任务导致,任务有的时候会冲突出现奇怪的问题。如何解决请继续看。scheduler=BackgroundScheduler()scheduler.add_job(testFunc,'interval',seconds=60)scheduler.......