Leetcode:1405、最长快乐字符串
2022/2/7 23:16:43
本文主要是介绍Leetcode:1405、最长快乐字符串,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我看到题目的时候愣了一会,多看几遍才发现,是给定abc的值,让你往字符串里面添加a,b,c三个字符,三个字符不能为连续的三个。
根据提示一,我们知道是要尽可能长,那么看到这种要求,那么我就选择使用贪心来解决这个问题。
贪心的思路是:
每次选三个字母数字最大的那一个,这样长+长+短+长+长,是字符串尽可能长的核心。
如果已经是长+长了,现在还是长的那个数字是最大的,那么我们依次向下选择第二长的,如果第二长的数字是0,那么就第三长,如果连第三长都是0,那么就直接结束循环。
class Solution { public String longestDiverseString(int a, int b, int c) { String str = ""; char ch[] = {'a','b','c'}; while(true){ //a最大的情况 if(a>=b && a>=c){ //先判断前两位不能是aa if(str.length()>=2 && str.substring(str.length()-2,str.length()).equals("aa")){ //如果前两位是aa了,就找第二大的 if(b>c && b!=0){ //第二大不能为0,如果为0,那么也就是第二大和第三大都是零,已经是最长的快乐字符串了 str += ch[1]; b--; }else if(c!=0){ str += ch[2]; c--; }else{ //至于这里为什么是使用a--,来让他自己达到结束循环的条件判断呢? //因为我发现这里使用break;来结束循环,好像执行用时更多? //不过我这题解本来就差了,break和自减随意就好~ a--; } }else{ str += ch[0]; a--; } } //额外判断,当abc都为零,就结束循环 if(a==0&&b==0&&c==0){ break; } //b最大的情况 if(b>=a && b>=c){ //先判断前两位不能是bb if(str.length()>=2 && str.substring(str.length()-2,str.length()).equals("bb")){ //如果前两位是aa了,就找第二大的 if(a>c && a!=0){ //第二大不能为0,如果为0,那么也就是第二大和第三大都是零,已经是最长的快乐字符串了 str += ch[0]; a--; }else if(c!=0){ str += ch[2]; c--; }else{ b--; } }else{ str += ch[1]; b--; } } //额外判断,当abc都为零,就结束循环 if(a==0&&b==0&&c==0){ break; } //c最大的情况 if(c>=b && c>=a){ //先判断前两位不能是cc if(str.length()>=2 && str.substring(str.length()-2,str.length()).equals("cc")){ //如果前两位是aa了,就找第二大的 if(a>b && a!=0){ //第二大不能为0,如果为0,那么也就是第二大和第三大都是零,已经是最长的快乐字符串了 str += ch[0]; a--; }else if(b!=0){ str += ch[1]; b--; }else{ c--; } }else{ str += ch[2]; c--; } } //额外判断,当abc都为零,就结束循环 if(a==0&&b==0&&c==0){ break; } } return str; } }
很菜,很拉的题解~
这篇关于Leetcode:1405、最长快乐字符串的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25安卓NDK 是什么?-icode9专业技术文章分享
- 2024-12-25caddy 可以定义日志到 文件吗?-icode9专业技术文章分享
- 2024-12-25wordfence如何设置密码规则?-icode9专业技术文章分享
- 2024-12-25有哪些方法可以实现 DLL 文件路径的管理?-icode9专业技术文章分享
- 2024-12-25错误信息 "At least one element in the source array could not be cast down to the destination array-icode9专业技术文章分享
- 2024-12-25'flutter' 不是内部或外部命令,也不是可运行的程序 或批处理文件。错误信息提示什么意思?-icode9专业技术文章分享
- 2024-12-25flutter项目 as提示Cannot resolve symbol 'embedding'提示什么意思?-icode9专业技术文章分享
- 2024-12-24怎么切换 Git 项目的远程仓库地址?-icode9专业技术文章分享
- 2024-12-24怎么更改 Git 远程仓库的名称?-icode9专业技术文章分享
- 2024-12-24更改 Git 本地分支关联的远程分支是什么命令?-icode9专业技术文章分享