【教3妹学编程-算法题】使三个字符串相等

【教3妹学编程-算法题】使三个字符串相等_第1张图片

2哥 : 3妹,咋啦?一副苦大仇深的样子?
3妹:不开心呀不开心,羽生结弦宣布离婚。
2哥 : 羽生什么?
3妹:羽生结弦!
2哥 : 什么结弦?
3妹:羽生结弦!!!
2哥:羽生结弦是谁?他离婚关你啥事啊?
3妹:你不知道,他是日本著名花滑运动员, 前几个月刚宣布结婚,没想到这么快就离了。真是短时间内震惊我两次!
2哥 : 是挺快的, 不过这种事情在明星里面也见怪不怪了,哈哈。 哎, 想我都30了,还没有女朋友。
3妹:才30而已嘛, 女生很多都喜欢找个比自己大一点的~
2哥 : 哎,你们女生最大能接受比自己大多少岁啊?
3妹:emmm, 这么不好说,要看具体女生,一般大个3-5岁都可以吧。 2哥说到最大, 我今天看到一个最大和查询的题目,让我也来考考你吧~

【教3妹学编程-算法题】使三个字符串相等_第2张图片

题目:

给你三个字符串 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 仅由小写英文字母组成。

思路:

【教3妹学编程-算法题】使三个字符串相等_第3张图片

动态规划,
利用动态规划 和 分治的思想,每一步找出局部最优解,然后在这些局部最优解中找出一个全局最优解,这个全局最优解就是我们想要的结果。

java代码:

class Solution {
    public int maxSubArray(int[] nums) {
        int pre = 0, maxAns = nums[0];
        for (int x : nums) {
            pre = Math.max(pre + x, x);
            maxAns = Math.max(maxAns, pre);
        }
        return maxAns;
    }
}

你可能感兴趣的:(教3妹学编辑-算法篇,算法)