2712.使所有字符相等的最小成本
链接:2712.使所有字符相等的最小成本
难度:Medium
标签:贪心、字符串、动态规划
简介:返回使字符串内所有字符 相等 需要的 最小成本 。
题解 1 - cpp
- 编辑时间:2023-05-28
- 执行用时:20ms
- 内存消耗:11.8MB
- 编程语言:cpp
- 解法介绍:一次遍历,遇到左右不等的,要不翻转左边,要不翻转右边。
class Solution {
public:
    typedef long long ll;
    ll minimumCost(string s) {
        ll res = 0;
        for (int i = 1; i < s.size(); i++) {
            if (s[i] != s[i - 1]) res += min(i, (int)s.size() - i);
        }
        return res;
    }
};
题解 2 - python
- 编辑时间:2023-05-28
- 执行用时:168ms
- 内存消耗:16.7MB
- 编程语言:python
- 解法介绍:同上。
class Solution:
    def minimumCost(self, s: str) -> int:
        res = 0
        for i in range(1, len(s)):
            if s[i] != s[i - 1]: res += min(i, len(s) - i)
        return res
题解 3 - cpp
- 编辑时间:2023-05-28
- 执行用时:92ms
- 内存消耗:30.8MB
- 编程语言:cpp
- 解法介绍:从中间向两边遍历。
class Solution {
public:
    typedef long long ll;
    ll minimumCost(string s) {
        ll n = s.size(), m = n / 2;
        function<ll(ll, ll, bool)> compL = [&](ll idx, ll target, bool rev) -> ll {
            if (idx == -1) return 0;
            ll val = s[idx] - '0';
            if (rev) val ^= 1;
            if (val == target) return compL(idx - 1, target, rev);
            return compL(idx - 1, target, !rev) + (idx + 1);
        };
        function<ll(ll, ll, bool)> compR = [&](ll idx, ll target, bool rev) -> ll {
            if (idx == n) return 0;
            ll val = s[idx] - '0';
            if (rev) val ^= 1;
            if (val == target) return compR(idx + 1, target, rev);
            return compR(idx + 1, target, !rev) + (n - idx);
        };
        return min(compL(m - 1, 0, false) + compR(m, 0, false), compL(m - 1, 1, false) + compR(m, 1, false));
    }
};
题解 4 - rust
- 编辑时间:2023-05-28
- 内存消耗:2.7MB
- 编程语言:rust
- 解法介绍:同上。
pub fn str_to_vec(s: &String) -> Vec<char> {
    s.chars().collect()
}
impl Solution {
    pub fn minimum_cost(s: String) -> i64 {
        let mut res = 0i64;
        let s = str_to_vec(&s);
        for i in 1..s.len() {
            if s[i] != s[i - 1] {
                res += i.min(s.len() - i) as i64;
            }
        }
        res
    }
}