767. 重构字符串
- 前言
- 题目
- 源码
前言
今天的题目说是排序也对,主要还是要对字符进行一个间隔处理。
题目
官方题目
源码
class Solution {
public String reorganizeString(String S) {
int len=S.length();int []count=new int[26];for (char c :S.toCharArray()) count[c-'a']+=100;//统计每个字符数量,之后使用/100来得到for(int i=0;i<26;++i) count[i]+=i;//再一次循环,为了可以通过mod100得到相应字符Arrays.sort(count);//排序char []ans=new char[len];int t=1;for(int cur:count){
int ct = cur/100;//得到数量char c =(char)((cur%100)+'a');//上文在100的基础上又加了i,其实就是定位了每个字符相对a的位置if (ct>(len+1)/2){
return "";}for(int i=0;i<ct;++i){
if(t>=len) t=0;//从最多的字符开始,间隔一个插入一个ans[t]=c;t+=2;}}return String.valueOf(ans);}
}
class Solution:def reorganizeString(self, S: str) -> str:N = len(S)A = []for c, x in sorted((S.count(x), x) for x in set(S)):if c > (N+1)/2: return ""A.extend(c * x)ans = [None] * N# ans[::2]是0开始,以2为间隔,ans[1::2]是1开始2间隔# 官方题解有错误,应该为int(N/2),float不能作为下标ans[::2], ans[1::2] = A[int(N/2):], A[:int(N/2)]return "".join(ans)