刷完LeetCode题库——1417. 重新格式化字符串

202 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情

题目详情

LeetCode题库序号 1417. 重新格式化字符串 ,难度为 简单

Tag : 「双指针」

给你一个混合了数字和字母的字符串 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"

提示:

  • 1 <= s.length <= 500
  • s 仅由小写英文字母和/或数字组成。

双指针

题解思路:这道题目虽然是一道简单题,但是存在一定的难度的,首先我们要数字字母交叉排序后返回,那么前置判断就是数字的数量和字母的数量的差值是不能大于1的,所以简单的计算差值进行前置判断,返回的时候使用双指针的方式,指定两个指针,将它们分别定义在对应的0和1的位置,循环交换位置。详情见以下代码:

题解代码

public class Solution {


    public String reformat(String s) {
        int charNumber = 0;
        int digitNumber = 0;
        int len = s.length();
        for (int i = 0; i < len; i++) {
            if (Character.isLetter(s.charAt(i))) {
                charNumber++;
            } else {
                digitNumber++;
            }
        }

        int diff = charNumber - digitNumber;

        if (Math.abs(diff) > 1) {
            return "";
        }

        boolean flag = digitNumber > charNumber;
        char[] arr = s.toCharArray();

        for (int i = 0, j = 1; i < s.length(); i += 2) {
            if (Character.isDigit(arr[i]) != flag) {
                while (Character.isDigit(arr[j]) != flag) {
                    j += 2;
                }
                swap(arr, i, j);
            }
        }
        return new String(arr);

    }

    public void swap(char[] arr, int i, int j) {
        char c = arr[i];
        arr[i] = arr[j];
        arr[j] = c;
    }
}

结尾

我的"刷完LeetCode题库"系列文章的第 No.1417 序号的题目,本次刷题之旅系列开始于 2022-06-12,因为LeetCode上部分是有锁题,我自己的目标是将先把所有不带锁的题目刷完。自己能够通过这次刷题之旅勉励自己,并且提升逻辑思维能力。这个系列的文章就是会见证我自己的一个成长过程!

思路虽然不是最优的,但是我会尽我所能!

为了让我自己的刷题之旅不中断,我特地建立了相关的仓库,来记录我自己的刷题之旅。 github.com/jackpan123/…