写点什么

【LeetCode】重新格式化字符串 Java 题解

作者:Albert
  • 2022 年 8 月 11 日
    北京
  • 本文字数:1255 字

    阅读完需:约 4 分钟

题目描述

给你一个混合了数字和字母的字符串 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"
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/reformat-the-string著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的算法题目是字符串处理题目,题意简单明了,给出了数字和字母的字符串 s,我们需要将字符串重新格式化,使得字母和数字间隔排列。

  • 首先使用朴素解法,遍历字符串 s, 分别按照数字和字符分组。分组之后,统计 charList, numberList 的长度,如果两者的长度之差绝对值大于 1,则不满足格式化条件,返回 ""。如果两者的长度之差绝对值小于 1, 我们重新格式化,格式化的时候,长度较长的列表在前,保证字符和数字的间隔。

  • 具体实现代码如下,供参考。

通过代码

class Solution {    public String reformat(String s) {        StringBuilder ans = new StringBuilder();        List<Character> charList = new ArrayList<>();        List<Character> numberList = new ArrayList<>();        for (char ch : s.toCharArray()) {            if (ch >= '0' && ch <= '9') {                numberList.add(ch);            } else {                charList.add(ch);            }        }        int m = charList.size();        int n = numberList.size();        int i = 0;        if (Math.abs(m - n) > 1) {            ans.append("");        } else {            if (m > n) {                for (; i < n; i++ ) {                    ans.append(charList.get(i));                    ans.append(numberList.get(i));                }                ans.append(charList.get(i));            } else {                for (; i < m; i++ ) {                    ans.append(numberList.get(i));                    ans.append(charList.get(i));                }                if (n - m != 0) {                    ans.append(numberList.get(i));                }            }        }        return ans.toString();    }}
复制代码

总结

  • 上述算法的时间复杂度是 O(n), 空间复杂度是 O(n)

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 3
用户头像

Albert

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】重新格式化字符串Java题解_LeetCode_Albert_InfoQ写作社区