leetcode-No.2937.使三个字符串相等
本文最后更新于 2024-07-13,文章内容可能已经过时。
题目
给你三个字符串 s1
、s2
和 s3
。 你可以根据需要对这三个字符串执行以下操作 任意次数 。
在每次操作中,你可以选择其中一个长度至少为 2
的字符串 并删除其 最右位置上 的字符。
如果存在某种方法能够使这三个字符串相等,请返回使它们相等所需的 最小 操作次数;否则,返回 -1
。
示例 1:
输入:s1 = "abc",s2 = "abb",s3 = "ab"
输出:2
解释:对 s1 和 s2 进行一次操作后,可以得到三个相等的字符串。
可以证明,不可能用少于两次操作使它们相等。
示例 2:
输入:s1 = "dac",s2 = "bac",s3 = "cac"
输出:-1
解释:因为 s1 和 s2 的最左位置上的字母不相等,所以无论进行多少次操作,它们都不可能相等。因此答案是 -1 。
答案
"""
给你三个字符串 s1、s2 和 s3。 你可以根据需要对这三个字符串执行以下操作 任意次数 。
在每次操作中,你可以选择其中一个长度至少为 2 的字符串 并删除其 最右位置上 的字符。
如果存在某种方法能够使这三个字符串相等,请返回使它们相等所需的 最小 操作次数;否则,返回 -1。
示例 1:
输入:s1 = "abc",s2 = "abb",s3 = "ab"
输出:2
解释:对 s1 和 s2 进行一次操作后,可以得到三个相等的字符串。
可以证明,不可能用少于两次操作使它们相等。
示例 2:
输入:s1 = "dac",s2 = "bac",s3 = "cac"
输出:-1
解释:因为 s1 和 s2 的最左位置上的字母不相等,所以无论进行多少次操作,它们都不可能相等。因此答案是 -1 。
"""
class Solution(object):
def findMinimumOperations(self, s1, s2, s3):
"""
:type s1: str
:type s2: str
:type s3: str
:rtype: int
"""
count = 0
for x, y, z in zip(s1, s2, s3):
if x != y or x != z:
break
count += 1
if count == 0:
return -1
else:
return len(s1) + len(s2) + len(s3) - count * 3
if __name__ == '__main__':
s1 = "dac"
s2 = "bac"
s3 = "cac"
sol = Solution()
print(sol.findMinimumOperations(s1, s2, s3))
if __name__ == '__main__':
s1 = "abc"
s2 = "abb"
s3 = "ab"
sol = Solution()
print(sol.findMinimumOperations(s1, s2, s3))
结果分析
这段代码的时间复杂度和空间复杂度都为O(n),其中n 是字符串 s1、s2 和 s3 的长度之和,因为在这段代码中,我们使用了一个循环,其迭代次数与输入的字符串长度成正比。此外,我们只需要常数级别的额外空间来存储变量,因此空间复杂度为O(1)
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Lin
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果