列表

详情


6375. 构造有效字符串的最少插入数

给你一个字符串 word ,你可以向其中任何位置插入 "a"、"b" 或 "c" 任意次,返回使 word 有效 需要插入的最少字母数。

如果字符串可以由 "abc" 串联多次得到,则认为该字符串 有效

 

示例 1:

输入:word = "b"
输出:2
解释:在 "b" 之前插入 "a" ,在 "b" 之后插入 "c" 可以得到有效字符串 "abc" 。

示例 2:

输入:word = "aaa"
输出:6
解释:在每个 "a" 之后依次插入 "b" 和 "c" 可以得到有效字符串 "abcabcabc" 。

示例 3:

输入:word = "abc"
输出:0
解释:word 已经是有效字符串,不需要进行修改。 

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int addMinimum(string word) { } };

rust 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2024-01-11 18:41:58

impl Solution {
    pub fn add_minimum(word: String) -> i32 {
        let s = word.as_bytes();
        let mut ans = s[0] as i32 - *s.last().unwrap() as i32 + 2;
        for i in 1..s.len() {
            ans += (s[i] as i32 - s[i - 1] as i32 + 2) % 3;
        }
        ans
    }
}

rust 解法, 执行用时: 0 ms, 内存消耗: 2.1 MB, 提交时间: 2024-01-11 18:41:35

impl Solution {
    pub fn add_minimum(word: String) -> i32 {
        let s = word.as_bytes();
        let mut t = 1;
        for i in 1..s.len() {
            if s[i - 1] >= s[i] {
                t += 1; // 必须生成一个新的 abc
            }
        }
        return t * 3 - s.len() as i32;
    }
}

cpp 解法, 执行用时: 4 ms, 内存消耗: 6.3 MB, 提交时间: 2024-01-11 18:41:02

class Solution {
public:
    int addMinimum(string s) {
        int t = 1;
        for (int i = 1; i < s.length(); i++) {
            t += s[i - 1] >= s[i]; // 必须生成一个新的 abc
        }
        return t * 3 - s.length();
    }
};

cpp 解法, 执行用时: 0 ms, 内存消耗: 6.4 MB, 提交时间: 2024-01-11 18:40:32

class Solution {
public:
    int addMinimum(string s) {
        int ans = s[0] + 2 - s.back();
        for (int i = 1; i < s.length(); i++) {
            ans += (s[i] + 2 - s[i - 1]) % 3;
        }
        return ans;
    }
};

golang 解法, 执行用时: 0 ms, 内存消耗: 2.1 MB, 提交时间: 2023-04-17 16:54:45

func addMinimum(s string) int {
	t := 1
	for i := 1; i < len(s); i++ {
		if s[i-1] >= s[i] { // 必须生成一个新的 abc
			t++
		}
	}
	return t*3 - len(s)
}

java 解法, 执行用时: 1 ms, 内存消耗: 41.3 MB, 提交时间: 2023-04-17 16:54:31

class Solution {
    public int addMinimum(String word) {
        var s = word.toCharArray();
        int t = 1;
        for (int i = 1; i < s.length; ++i)
            if (s[i - 1] >= s[i]) // 必须生成一个新的 abc
                ++t;
        return t * 3 - s.length;
    }
}

python3 解法, 执行用时: 36 ms, 内存消耗: 14.8 MB, 提交时间: 2023-04-17 16:54:19

class Solution:
    def addMinimum(self, s: str) -> int:
        t = 1 + sum(x >= y for x, y in pairwise(s))
        return t * 3 - len(s)

golang 解法, 执行用时: 0 ms, 内存消耗: 2.1 MB, 提交时间: 2023-04-17 16:53:51

func addMinimum(s string) int {
	ans := int(s[0]) - int(s[len(s)-1]) + 2
	for i := 1; i < len(s); i++ {
		ans += (int(s[i]) - int(s[i-1]) + 2) % 3
	}
	return ans
}

java 解法, 执行用时: 1 ms, 内存消耗: 41.6 MB, 提交时间: 2023-04-17 16:53:34

class Solution {
    public int addMinimum(String word) {
        var s = word.toCharArray();
        int ans = s[0] + 2 - s[s.length - 1];
        for (int i = 1; i < s.length; ++i)
            ans += (s[i] + 2 - s[i - 1]) % 3;
        return ans;
    }
}

python3 解法, 执行用时: 40 ms, 内存消耗: 14.9 MB, 提交时间: 2023-04-17 16:53:19

class Solution:
    def addMinimum(self, s: str) -> int:
        ans = ord(s[0]) - ord(s[-1]) + 2
        for x, y in pairwise(map(ord, s)):
            ans += (y - x + 2) % 3
        return ans

上一题