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 已经是有效字符串,不需要进行修改。
提示:
1 <= word.length <= 50
word
仅由字母 "a"、"b" 和 "c" 组成。原站题解
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