力扣 767 重构字符串

题意:给定一个字符串,重构字符串,让相同的字符,不相邻

思路:利用奇偶性,具体见代码注释

思想:字符规律

复杂度:时间O(n),空间O(n)

class Solution {
    public String reorganizeString(String S) {
        if(S == null)
            return S;
        int len = S.length();
        if(len == 0)
            return S;
        
        char[] arr = new char[len];
        int[] count = new int[256];
        int max = 0;
        int index = -1;
        // 遍历字符串,找出字符串中每一个字符的个数,以及出现最多的字符
        for(int i=0;i<len;i++) {
            int temp = (int)S.charAt(i);
            count[temp]++;
            if(count[temp] > max) {
                max = count[temp];
                index = temp;
            }
        }
        
        // 如果最多的字符超过了一般,返回空
        if(max > (len +1)/2)
            return "";
        
        int cnt = 0;
        
        // 把最多的字符隔一位放入结果
        while(count[index] > 0) {
            arr[cnt] = (char)index;
            cnt = cnt+2;
            count[index]--;
        }
        
        // 遍历count把每一个不为0的字符,隔一位加入结果
        for(int i=0;i<256;i++) {
            while(count[i] > 0) {
                // 当奇数位用完之后,从头开始用偶数位放元素
                if(cnt >= len) 
                    cnt = 1;
                arr[cnt] = (char)i;
                cnt = cnt+2;
                count[i]--;
            }
        }
        
        return new String(arr);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 字符串循环移位包含 1.1 题目 1.2 分析解答 法一:构建辅助字符串,利用额外空间构建一个辅助字符串s ...
    奔向星辰大海阅读 1,930评论 0 0
  • 介绍 本节内容将介绍在 Python 里处理字符串的基本概念,以及正则表达式的使用,以及介绍几种常见的字符串处理算...
    寒冰卿阅读 4,057评论 0 0
  • Python支持:数学运算符、比较运算符、逻辑运算符、、赋值运算符、位运算符 数学运算符:+(加号)、-(减号)、...
    为了生活的苟且阅读 2,669评论 0 0
  • 一、运算符 python 支持:数学运算符、比较运算符、逻辑运算符、赋值运算符、(位运算符) 1.数学运算符: "...
    LitoYu阅读 3,793评论 0 1
  • 一、python运算符:数学运算符、比较运算符、逻辑运算符、赋值运算符、位运算符 1. 数学运算符:+、-、*、/...
    _最美不是下雨天_阅读 50评论 0 0