2024-03-02:用go语言,一个句子是由一些单词与它们之间的单个空格组成, 且句子

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)

在这里插入图片描述

本作品采用《CC 协议》,转载必须注明作者和本文链接
微信公众号:福大大架构师每日一题。最新面试题,涉及golang,rust,mysql,redis,云原生,算法,分布式,网络,操作系统。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
472
粉丝
21
喜欢
37
收藏
22
排名:457
访问:1.9 万
私信
所有博文
社区赞助商