class Solution {
public:
bool isDecomposable(string s) {
}
};
1933. 判断字符串是否可分解为值均等的子串
一个字符串的所有字符都是一样的,被称作等值字符串。
"1111"
和 "33"
就是等值字符串。"123"
就不是等值字符串。规则:给出一个数字字符串s,将字符串分解成一些等值字符串,如果有且仅有一个等值子字符串长度为2,其他的等值子字符串的长度都是3.
如果能够按照上面的规则分解字符串s,就返回真,否则返回假。
子串就是原字符串中连续的字符序列。
示例 1:
输入: s = "000111000" 输出: false 解释: s只能被分解长度为3的等值子字符串。
示例 2:
输入: s = "00011111222" 输出: true 解释: s 能被分解为 ["000","111","11","222"].
示例 3:
输入: s = "01110002223300" 输出: false 解释: 一个不能被分解的原因是在开头有一个0.
提示:
1 <= s.length <
= 1000
s
仅包含数字。原站题解
golang 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2023-10-15 15:23:26
func isDecomposable(s string) bool { l := 0 r := 0 size := len(s) res := 0 for r < size { t := 0 for r < size && s[l] == s[r] { r++ t++ } if t % 3 == 1 { return false } if t % 3 == 2 { res++ } l = r } return res == 1 }
python3 解法, 执行用时: 40 ms, 内存消耗: 16.1 MB, 提交时间: 2023-10-15 15:22:54
class Solution: def isDecomposable(self, s: str) -> bool: len_2 = False n = len(s) i = 0 while i < n: cur_len = 1 while i + 1 < n and s[i] == s[i+1]: i += 1 cur_len += 1 if cur_len % 3 == 2: #当前这段长度模3为2。分成5 = 2 + 3 if len_2 == True: #长度为2的段只能有一个 return False len_2 = True else: if cur_len % 3 != 0: return False i += 1 #指向下一段的第一个位置 return len_2
cpp 解法, 执行用时: 0 ms, 内存消耗: 6.7 MB, 提交时间: 2023-10-15 15:22:27
class Solution { public: bool isDecomposable(string s) { int n = s.size(); bool find_len2 = false; int i = 0; while (i < n) { int cur_len = 1; while (i + 1 < n && s[i] == s[i+1]) { i ++; cur_len ++; } if (cur_len % 3 == 2) { if (find_len2 == true) return false; find_len2 = true; } else { if (cur_len % 3 != 0) return false; } i++; } return find_len2; } };
java 解法, 执行用时: 1 ms, 内存消耗: 39.5 MB, 提交时间: 2023-10-15 15:21:32
class Solution { public boolean isDecomposable(String s) { int i = 0, two = 0; while (i < s.length()) { int j = i + 1; while (j < s.length() && s.charAt(j) == s.charAt(i)) j++; if ((j - i) % 3 == 1) return false; if ((j - i) % 3 == 2) two++; i = j; } return two == 1; } }