列表

详情


2937. 使三个字符串相等

给你三个字符串 s1s2s3。 你可以根据需要对这三个字符串执行以下操作 任意次数

在每次操作中,你可以选择其中一个长度至少为 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 { public: int findMinimumOperations(string s1, string s2, string s3) { } };

golang 解法, 执行用时: 8 ms, 内存消耗: 3.3 MB, 提交时间: 2023-11-21 21:33:49

func findMinimumOperations(s1, s2, s3 string) int {
	n := min(len(s1), len(s2), len(s3))
	i := 0
	for i < n && s2[i] == s1[i] && s3[i] == s1[i] {
		i++
	}
	if i == 0 {
		return -1
	}
	return len(s1) + len(s2) + len(s3) - i*3
}

cpp 解法, 执行用时: 4 ms, 内存消耗: 7.1 MB, 提交时间: 2023-11-21 21:33:20

class Solution {
public:
    int findMinimumOperations(string s1, string s2, string s3) {
        int n = min({s1.length(), s2.length(), s3.length()});
        int i = 0;
        while (i < n && s2[i] == s1[i] && s3[i] == s1[i]) {
            i++;
        }
        return i == 0 ? -1 : s1.length() + s2.length() + s3.length() - i * 3;
    }
};

java 解法, 执行用时: 1 ms, 内存消耗: 43 MB, 提交时间: 2023-11-21 21:32:53

class Solution {
    public int findMinimumOperations(String s1, String s2, String s3) {
        int n = Math.min(Math.min(s1.length(), s2.length()), s3.length());
        int i = 0;
        while (i < n && s2.charAt(i) == s1.charAt(i) && s3.charAt(i) == s1.charAt(i)) {
            i++;
        }
        return i == 0 ? -1 : s1.length() + s2.length() + s3.length() - i * 3;
    }
}

python3 解法, 执行用时: 40 ms, 内存消耗: 16 MB, 提交时间: 2023-11-21 21:32:20

class Solution:
    def findMinimumOperations(self, s1: str, s2: str, s3: str) -> int:
        lcp = 0
        for x, y, z in zip(s1, s2, s3):
            if x != y or x != z:
                break
            lcp += 1
        return -1 if lcp == 0 else len(s1) + len(s2) + len(s3) - lcp * 3

上一题