☰
算法日常・每日刷题--<贪心>29
2026/10/1 2:57:38 网站建设 项目流程

767. 重构字符串 - 力扣(LeetCode)767. 重构字符串 - 给定一个字符串 s ,检查是否能重新排布其中的字母,使得任意两个相邻字符不相同。返回 s 的任意可能的重新排列。若不可行,返回空字符串 "" 。 示例 1:输入: s = "aab"输出: "aba"示例 2:输入: s = "aaab"输出: "" 提示: * 1 <= s.length <= 500 * s 只包含小写字母https://leetcode.cn/problems/reorganize-string/

题目描述

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

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

示例 1 输入:s = "aab"输出:"aba"

示例 2 输入:s = "aaab"输出:""

核心判定条件:出现次数最多的字符,次数不能大于(n+1)/2,大于则一定无法构造,直接返回空串。

解法

和前面一题基本相似,这里不过多赘述

class Solution { public: string reorganizeString(string s) { unordered_map<int,int>hash; sort(s.begin(), s.end()); cout<<s<<endl; int maxnum=0; char target; for(auto e:s) { hash[e]++; if(hash[e]>maxnum) { maxnum=hash[e]; target=e; } } int n=s.size(); string ret(n,'1'); if(maxnum>(n+1)/2) return ""; for(int i=0;i<n;i++) { if(s[i]==target) { int j=0; while(j<n) { ret[j]=s[i]; i=(i+1)%n; j+=2; } j=1; while(j<n) { ret[j]=s[i]; i=(i+1)%n; j+=2; } break; } } return ret; } };

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询