美文网首页
767. 重构字符串

767. 重构字符串

作者: 周英杰Anita | 来源:发表于2019-12-17 23:17 被阅读0次

题目描述:

给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。

若可行,输出任意可行的结果。若不可行,返回空字符串。

示例 1:

输入: S = "aab"
输出: "aba"

示例 2:

输入: S = "aaab"
输出: ""

注意:

S 只包含小写字母并且长度在[1, 500]区间内。

思路:

1、当某个字符出现的次数大于字符总数的一半时,必然无法进行重构,这时候返回空字符串。
2、将字符串中的字符按照26个字幕的排序放到数组中,字符出现的次数作为数组的元素。
3、遍历数组,将字符串中的字符依次存储到字符数组中。将字符个数小于字符串长度的一半的字符存入奇数下标位置(例如vvvlo中,l和o都需要存入奇数下标位置,v需要存入偶数下标位置),否则存入偶数下标位置(例如上面例子aab中,aa就需要存入偶数下标位置)。

Java解法:

class Solution {
    public String reorganizeString(String S) {
        int len = S.length();
        int[] counts = new int[26];
        int maxlen = 0;
        for (int i = 0 ; i < len; i++){
            if (++counts[S.charAt(i) - 'a'] > maxlen)
            {
                maxlen = counts[S.charAt(i) - 'a'];
            }
        }
        if (maxlen > (len+1)/2)
        {
            return "";
        }
        char[] str = new char[len];
        int even = 0, odd = 1;
        for(int i = 0 ; i < 26; i++)
        {
            while(counts[i] > 0 && counts[i] < (len/2+1) && odd<len )
            {
                str[odd] = (char)(i + 'a');
                counts[i]--;
                odd += 2;
            }
            while(counts[i] > 0)
            {
                str[even] = (char)(i + 'a');
                counts[i]--;
                even += 2;
            }
        }
        return new String(str);
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers

相关文章

  • 767. 重构字符串

    题目描述: 给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。 若可行,输出任意可行的结果。若...

  • LeetCode 767. 重构字符串

    1、题目 重构字符串 - 力扣(LeetCode) https://leetcode-cn.com/problem...

  • 767. 重构字符串(Python)

    难度:★★★☆☆类型:字符串方法:贪心算法 力扣链接请移步本题传送门[https://leetcode-cn.co...

  • LeetCode 重构字符串

    一、解题思路 贪心算法 1、根据字母在字符串中出现的次数来决定新的位置。 2、通过维护两个参数:奇数下标、偶数下标...

  • 767. Reorganize String

    https://leetcode.com/problems/reorganize-string/descripti...

  • LeetCode 767 重构字符串

    题目 重构字符串 描述 给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行...

  • Leetcode767(Leetcode1054).重构字符串(

    Leetcode767. 重构字符串 题目描述 给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不...

  • 力扣 767 重构字符串

    题意:给定一个字符串,重构字符串,让相同的字符,不相邻 思路:利用奇偶性,具体见代码注释 思想:字符规律 复杂度:...

  • 代码重构专题(转载)

    代码重构(一):函数重构规则代码重构(二):类重构规则代码重构(三):数据重构规则代码重构(四):条件表达式重构规...

  • 767. 江南的雪

    北方枯枝寒风过,江南绿草素洁心燕子迁徙觅春色,原是红枫开棉花

网友评论

      本文标题:767. 重构字符串

      本文链接:https://www.haomeiwen.com/subject/osuenctx.html