博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】Reorganize String
阅读量:6351 次
发布时间:2019-06-22

本文共 2118 字,大约阅读时间需要 7 分钟。

题目如下:

Given a string S, check if the letters can be rearranged so that two characters that are adjacent to each other are not the same.If possible, output any possible result.  If not possible, return the empty string.Example 1:Input: S = "aab"Output: "aba"Example 2:Input: S = "aaab"Output: "" Note:S will consist of lowercase letters and have length in range [1, 500].

解题思路:刚看到这个题目,我觉得有点无从下手。但是仔细考虑之后,我觉得这个题目满足一个经典的算法场景——把一个数组分成两个子数组,使得两个子数组和最接近。例如,输入的字符串S="aabc",可以被实例化成字段d = {a:2,b:1,c:1},那么三个字符出现的次数就构成了[2,1,1],把数组分成和最接近的两个子数组[2]和[1,1]。最后是生成输出的字符串,只要在两个数组中依次各取一个字符拼接即可。注意:如何两个子数组和差值大于2的话,那么是不可能组成题目要求的字符串的。

代码如下:

//动态规划思想分割子数组var diff = function(map){    var len = map.length    var sum = 0    for(var i =0;i
<= sum/2;j ++){ list.push(0) } dp.push(list) } for(var i =1;i<=len;i++) { for(var j = 1;j <= sum/2;j ++) { if(j>=map[i-1].v){ dp[i][j] = Math.max(dp[i-1][j],dp[i-1][j-map[i-1].v]+map[i-1].v); } else { dp[i][j] = dp[i - 1][j]; } } } //子数组和的差值大于等于2,直接返回空 if (sum - 2*dp[len][parseInt(sum / 2)] >=2){ return "" } var t = parseInt(sum/2) var s1 = "" var s2 = "" //确定每个子数组的分配的元素 for(var i=len;i>0;i--){ if(dp[i][t] > dp[i-1][t]){ // 找到第一个接近 sum/2 的,然后与 它上面的比较,如果大于,则代表当前 i 被选中 t -= map[i-1].v; var tmp = map[i-1].v while (tmp-- > 0){ s1 += map[i-1].k } } else{ var tmp = map[i-1].v while (tmp-- > 0){ s2 += map[i-1].k } } } //生成返回值,依次从每个子数组中取一个元素,注意和较大的子数组排在前面 var s = "" for(var i = 0;i
s2.length){ s += s1[i] s += s2[i] } else{ s += s2[i] s += s1[i] } } if(s1.length != s2.length){ s += (s1.length > s2.length ? s1[s1.length-1] : s2[s2.length-1]) } return s}var reorganizeString = function(S) { var dic = new Array(26) for(var i=0;i

 

转载于:https://www.cnblogs.com/seyjs/p/8343574.html

你可能感兴趣的文章
boost bind使用指南
查看>>
使用ntpdate更新系统时间
查看>>
Android M 特性 Doze and App Standby模式详解
查看>>
IE FF(火狐) line-height兼容详解
查看>>
谷歌Pixel 3吸引三星用户, 但未动摇iPhone地位
查看>>
VUE中使用vuex,cookie,全局变量(少代码示例)
查看>>
grep -w 的解析_学习笔记
查看>>
量化交易之启航
查看>>
TX Text Control文字处理教程(3)打印操作
查看>>
CENTOS 7 如何修改IP地址为静态!
查看>>
MyCat分片算法学习(纯转)
查看>>
IO Foundation 3 -文件解析器 FileParser
查看>>
linux学习经验之谈
查看>>
mysqld_multi实现多主一从复制
查看>>
中介模式
查看>>
JS中将变量转为字符串
查看>>
servlet笔记
查看>>
JVM(五)垃圾回收器的前世今生
查看>>
CentOS 7 下安装 Nginx
查看>>
Spring Boot 自动配置之@EnableAutoConfiguration
查看>>