DAY39 LeetCode学习笔记

it2024-12-28  14

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)
最新回复(0)