zoukankan      html  css  js  c++  java
  • 1417. Reformat The String

    Given alphanumeric string s. (Alphanumeric string is a string consisting of lowercase English letters and digits).

    You have to find a permutation of the string where no letter is followed by another letter and no digit is followed by another digit. That is, no two adjacent characters have the same type.

    Return the reformatted string or return an empty string if it is impossible to reformat the string.

    Example 1:

    Input: s = "a0b1c2"
    Output: "0a1b2c"
    Explanation: No two adjacent characters have the same type in "0a1b2c". "a0b1c2", "0a1b2c", "0c2a1b" are also valid permutations.
    

    Example 2:

    Input: s = "leetcode"
    Output: ""
    Explanation: "leetcode" has only characters so we cannot separate them by digits.
    

    Example 3:

    Input: s = "1229857369"
    Output: ""
    Explanation: "1229857369" has only digits so we cannot separate them by characters.
    

    Example 4:

    Input: s = "covid2019"
    Output: "c2o0v1i9d"
    

    Example 5:

    Input: s = "ab123"
    Output: "1a2b3"
    

    Constraints:

    • 1 <= s.length <= 500
    • s consists of only lowercase English letters and/or digits.
    class Solution {
        public String reformat(String s) {
            int le = s.length();
            StringBuffer letters = new StringBuffer();
            StringBuffer digits = new StringBuffer();
            StringBuffer res = new StringBuffer();
            for(char c: s.toCharArray()){
                if(c >= '0' && c <='9') digits.append(c);
                else if(c >='a' && c <= 'z') letters.append(c);
            }
            if(letters.length() >= (digits.length() + 2) || (letters.length() + 2)<= digits.length()) return "";
            else{
                if(letters.length() == (digits.length() + 1)){
                    res.append(letters.charAt(0));
                    for(int i = 0; i < digits.length(); i++){
                        res.append(digits.charAt(i));
                        res.append(letters.charAt(i+1));
                    }
                }
                else if(letters.length() == (digits.length() - 1)){
                    res.append(digits.charAt(0));
                    for(int i = 0; i < letters.length(); i++){
                        res.append(letters.charAt(i));
                        res.append(digits.charAt(i+1));
                    }
                }
                else{
                    for(int i = 0; i < letters.length(); i++){
                        res.append(letters.charAt(i));
                        res.append(digits.charAt(i));
                    }
                } 
            }
            return res.toString();
        }
    }
  • 相关阅读:
    共享内存
    利用消息队列实现ECHO_SRV
    LINUX学习:System V消息队列
    linux:利用socketpair来在进程间传递描述符
    react传参
    ajax、axios、fetch
    js 深拷贝和浅拷贝实现
    css----px、rem、em、vw、vh、vm
    Sass、Less 和 Stylus区别
    箭头函数和普通函数对比
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12759260.html
Copyright © 2011-2022 走看看