列表

详情


1417. 重新格式化字符串

给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。

请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。

请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串

 

示例 1:

输入:s = "a0b1c2"
输出:"0a1b2c"
解释:"0a1b2c" 中任意两个相邻字符的类型都不同。 "a0b1c2", "0a1b2c", "0c2a1b" 也是满足题目要求的答案。

示例 2:

输入:s = "leetcode"
输出:""
解释:"leetcode" 中只有字母,所以无法满足重新格式化的条件。

示例 3:

输入:s = "1229857369"
输出:""
解释:"1229857369" 中只有数字,所以无法满足重新格式化的条件。

示例 4:

输入:s = "covid2019"
输出:"c2o0v1i9d"

示例 5:

输入:s = "ab123"
输出:"1a2b3"

 

提示:

原站题解

去查看

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

golang 解法, 执行用时: 12 ms, 内存消耗: 6.6 MB, 提交时间: 2021-06-22 18:08:24

func reformat(s string) string {
    num, alpha := []byte{}, []byte{}
    for i := range s {
        if s[i] >= '0' && s[i] <= '9' {
            num = append(num, s[i])
        } else {
            alpha = append(alpha, s[i])
        }
    }

    if abs(len(num)-len(alpha)) > 1 {
        return ""
    }

    k1, k2 := len(num), len(alpha)
    m := min(k1, k2)
    ans := ""
    for i := 0; i < m; i++ {
        ans += fmt.Sprintf("%c%c", num[i], alpha[i])
    }
    if k1 > k2 {
        return ans + string(num[k1-1]) 
    } else if k2 > k1 {
        return string(alpha[k2-1]) + ans
    }
    return ans
}

func abs(x int) int {
	if x < 0 {
		return -x
	}
	return x
}

func min(x, y int) int {
	if x > y {
		return y
	}
	return x
}

上一题