class Solution {
public:
int findMinimumOperations(string s1, string s2, string s3) {
}
};
2937. 使三个字符串相等
给你三个字符串 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 。
提示:
1 <= s1.length, s2.length, s3.length <= 100
s1
、s2
和 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