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 完整代码如下:
python 完整代码如下:
版权声明: 本文为 InfoQ 作者【福大大架构师每日一题】的原创文章。
原文链接:【http://xie.infoq.cn/article/897b24f8a5e3ca63df88c2170】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论