767. Reorganize String

本文介绍了一种字符串处理算法,用于检查并实现字符串中字符的重新排列,确保相邻字符不相同。若无法实现,则返回空字符串。文章通过具体示例展示了算法的工作原理及实现过程。

题目

Given a string S, check if the letters can be rearranged so that two characters that are adjacent to each other are not the same.

If possible, output any possible result.  If not possible, return the empty string.

Example 1:

Input: S = "aab"
Output: "aba"

Example 2:

Input: S = "aaab"
Output: ""

Note:

  • S will consist of lowercase letters and have length in range [1, 500].

 

思路

该题目类型属于排序题,我认为这个归类不是太准确,应该归到字符串处理这一类。题目要求将字符串中的字符重新排列,要求两两之间不能有相同字符,并输出其中一种结果,如果不存在上述情况则输出空字符串。

代码

class Solution {
    public String reorganizeString(String S) {
        int N = S.length();
        int[] cnt = new int[256];//count ASCII(256)
        char mc = 'a';//most frequent char(default 'a')
        //Frequency statistics
        for(char c:S.toCharArray())
        {
            cnt[c]++;
            mc = (cnt[c]>cnt[mc])?c:mc;//most frequent char
        }
        //return ""
        if((N-cnt[mc])<(cnt[mc]-1))
            return "";
        //return one possible case
        StringBuilder[] sb = new StringBuilder[cnt[mc]];
        for(int i=0;i<cnt[mc];i++)
        {
            sb[i] = new StringBuilder();
            sb[i].append(mc);
        }
        int k = 0;
        //Loop interpolation   
        for(char c ='a';c<='z';c++)// defult in a~z
        {
            while(cnt[c]>0&&c!=mc)
            {
                sb[k++].append(c);
                cnt[c]--;
                k%=cnt[mc];//loop
            }
        }
        for(int i=1;i<cnt[mc];i++)
            sb[0].append(sb[i]);
        return sb[0].toString();
    }
}
CREATE TABLE IF NOT EXISTS ZTCA.GEN_LED_VOUCHER_ROW_UNION_QRY ( `COMPANY` VARCHAR(50) COMMENT 'COMPANY', -- Changed from STRING to VARCHAR `VOUCHER_TYPE` VARCHAR(20) COMMENT 'VOUCHER_TYPE', -- Changed from STRING to VARCHAR `VOUCHER_NO` BIGINT COMMENT 'VOUCHER_NO', `ACCOUNTING_YEAR` INT COMMENT 'ACCOUNTING_YEAR', -- 分区字段(整数类型) `ROW_NO` DOUBLE COMMENT 'ROW_NO', `ACCOUNTING_PERIOD` DOUBLE COMMENT 'ACCOUNTING_PERIOD', `VOUCHER_DATE` DATETIME COMMENT 'VOUCHER_DATE', `APPROVAL_DATE` DATETIME COMMENT 'APPROVAL_DATE', `YEAR_PERIOD` STRING COMMENT 'YEAR_PERIOD', `YEAR_PERIOD_KEY` DOUBLE COMMENT 'YEAR_PERIOD_KEY', `ACCOUNT_TYPE` STRING COMMENT 'ACCOUNT_TYPE', `ACCOUNT_GROUP` STRING COMMENT 'ACCOUNT_GROUP', `INTERNAL_SEQ_NUMBER` DOUBLE COMMENT 'INTERNAL_SEQ_NUMBER', `POSTING_COMBINATION_ID` DOUBLE COMMENT 'POSTING_COMBINATION_ID', `ACCOUNT` STRING COMMENT 'ACCOUNT', `ACCOUNT_DESC` STRING COMMENT 'ACCOUNT_DESC', `CODE_J` STRING COMMENT 'CODE_J', `CODE_J_DESC` STRING COMMENT 'CODE_J_DESC', `TRANS_CODE` STRING COMMENT 'TRANS_CODE', `TEXT` STRING COMMENT 'TEXT', `DELIV_TYPE_ID` STRING COMMENT 'DELIV_TYPE_ID', `JOU_NO` INT COMMENT 'JOU_NO', `OBJID` STRING COMMENT 'OBJID', `OBJVERSION` STRING COMMENT 'OBJVERSION', `OBJKEY` STRING COMMENT 'OBJKEY' ) ENGINE=OLAP DUPLICATE KEY(COMPANY, VOUCHER_TYPE, VOUCHER_NO, ACCOUNTING_YEAR) -- Now using VARCHAR columns COMMENT '总账凭证行联合查询表(按年动态分区)' PARTITION BY RANGE(ACCOUNTING_YEAR) -- 仅按年份分区 ( PARTITION p2024 VALUES LESS THAN (2025), -- 2024年 PARTITION p2025 VALUES LESS THAN (2026), -- 2025年(当前年) PARTITION p2026 VALUES LESS THAN (2027), -- 2026年(未来) PARTITION p_future VALUES LESS THAN MAXVALUE -- 2027年及以后的默认分区 ) DISTRIBUTED BY HASH(VOUCHER_NO) BUCKETS 16 PROPERTIES ( "replication_num" = "3", -- 3副本 "storage_format" = "V2", -- 列式存储V2 "enable_persistent_index" = "true" );
最新发布
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roaring Kitty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值