leetcode_767. 重构字符串
【摘要】 目录
一、题目内容
二、解题思路
三、代码
一、题目内容
给定一个字符串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.如果找不到这样的字符,就返回“”空字符串
注:若想得到相邻这样的关系,只有字母出现次数多的相邻,否则只能一个挨着一个都是一样的字母了。
三、代码
-
class Solution:
-
def reorganizeString(self, S: str) -> str:
-
record = [0 for _ in range(26)]
-
for i in range(len(S)):
-
record[ord(S[i]) - ord('a')] += 1
-
max_record = max(record)
-
max_record_index = record.index(max_record)
-
-
res = []
-
res.append(chr(ord('a') + max_record_index))
-
record[max_record_index] -= 1
-
-
while len(res) < len(S):
-
next_max_record_index = -1
-
max_record = 0
-
for i in range(26):
-
if record[i] > max_record and i != max_record_index:
-
max_record = record[i]
-
next_max_record_index = i
-
if next_max_record_index != -1:
-
res.append(chr(ord('a') + next_max_record_index))
-
record[next_max_record_index] -= 1
-
max_record_index = next_max_record_index
-
else:
-
return ""
-
-
return "".join(res)
-
-
-
-
if __name__ == '__main__':
-
a = "aaab"
-
s = Solution()
-
ans = s.reorganizeString(a)
-
print(ans)
文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。
原文链接:nickhuang1996.blog.csdn.net/article/details/110384725
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)