当前位置: 代码迷 >> 综合 >> DAY39 LeetCode学习笔记
  详细解决方案

DAY39 LeetCode学习笔记

热度:36   发布时间:2023-11-17 10:14:41.0

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)