leetcode_767. 重构字符串

举报
悲恋花丶无心之人 发表于 2021/02/03 01:02:04 2021/02/03
【摘要】 目录 一、题目内容 二、解题思路 三、代码 一、题目内容 给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。 若可行,输出任意可行的结果。若不可行,返回空字符串。 示例 1: 输入: S = "aab" 输出: "aba" 示例 2: 输入: S = "aaab" 输出: "" 注...

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

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

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

示例 1:

输入: S = "aab"
输出: "aba"

示例 2:

输入: S = "aaab"
输出: ""

注意:

S 只包含小写字母并且长度在[1, 500]区间内。


二、解题思路

1.对S中的字母构建数组哈希表,统计各个字符出现的次数

2.将出现次数最多的字符,添加至res结果字符串,并且次数减一

3.每次循环都去找当前出现次数最多,并且和上一个添加进res中不同的字符,插入到结果字符串后;

4.如果找不到这样的字符,就返回“”空字符串

注:若想得到相邻这样的关系,只有字母出现次数多的相邻,否则只能一个挨着一个都是一样的字母了。


三、代码


  
  1. class Solution:
  2. def reorganizeString(self, S: str) -> str:
  3. record = [0 for _ in range(26)]
  4. for i in range(len(S)):
  5. record[ord(S[i]) - ord('a')] += 1
  6. max_record = max(record)
  7. max_record_index = record.index(max_record)
  8. res = []
  9. res.append(chr(ord('a') + max_record_index))
  10. record[max_record_index] -= 1
  11. while len(res) < len(S):
  12. next_max_record_index = -1
  13. max_record = 0
  14. for i in range(26):
  15. if record[i] > max_record and i != max_record_index:
  16. max_record = record[i]
  17. next_max_record_index = i
  18. if next_max_record_index != -1:
  19. res.append(chr(ord('a') + next_max_record_index))
  20. record[next_max_record_index] -= 1
  21. max_record_index = next_max_record_index
  22. else:
  23. return ""
  24. return "".join(res)
  25. if __name__ == '__main__':
  26. a = "aaab"
  27. s = Solution()
  28. ans = s.reorganizeString(a)
  29. print(ans)

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/110384725

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。