列表

详情


1933. 判断字符串是否可分解为值均等的子串

一个字符串的所有字符都是一样的,被称作等值字符串。

规则:给出一个数字字符串s,将字符串分解成一些等值字符串,如果有且仅有一个等值子字符串长度为2,其他的等值子字符串的长度都是3.

如果能够按照上面的规则分解字符串s,就返回真,否则返回假。

子串就是原字符串中连续的字符序列。

 

示例 1:

输入: s = "000111000"
输出: false
解释:  s只能被分解长度为3的等值子字符串。

示例 2:

输入: s = "00011111222"
输出: true
解释: s 能被分解为 ["000","111","11","222"].

示例 3:

输入: s = "01110002223300"
输出: false
解释: 一个不能被分解的原因是在开头有一个0.

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool isDecomposable(string 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;
    }
}

上一题