题目描述

一个 「开心字符串」定义为:仅包含小写字母 [‘a’, ‘b’, ‘c’].
对所有在 1 到 s.length - 1 之间的 i ,满足 s[i] != s[i + 1] (字符串的下标从 1 开始)。
比方说,字符串 “abc”,“ac”,“b” 和 “abcbabcbcb” 都是开心字符串,但是 “aa”,“baa” 和 “ababbc” 都不是开心字符串。
给你两个整数 n 和 k ,你需要将长度为 n 的所有开心字符串按字典序排序。
请你返回排序后的第 k 个开心字符串,如果长度为 n 的开心字符串少于 k 个,那么请你返回 空字符串 。

示例 1:

输入:n = 1, k = 3
输出:"c"
解释:列表 ["a", "b", "c"] 包含了所有长度为 1 的开心字符串。
按照字典序排序后第三个字符串为 "c" 。

示例 2:

输入:n = 1, k = 4
输出:""
解释:长度为 1 的开心字符串只有 3 个。

示例 3:

输入:n = 3, k = 9
输出:"cab"
解释:长度为 3 的开心字符串总共有 12 个 ["aba", "abc",
"aca", "acb", "bab", "bac", "bca", "bcb", "cab", "cac", "cba",
"cbc"] 。第 9 个字符串为 "cab"

示例 4:

输入:n = 2, k = 7 输出:""

1. 示例 5:

输入:n = 10, k = 100 输出:"abacbabacb"

解题思路: 利用回溯法求出所有的开心字符串保存到 List 中,在遍历求取所有的开心字符串的时候List已经按照字典序存放.

代码:

class Solution {private String[] sAbc = new String[]{"a","b","c"};private List<String> list = new LinkedList<String>();public String getHappyString(int n, int k) {if(n==1 && k>3){return "";}String s = "";dfs(s,n);return list.size()<k?"":list.get(k-1);}public void dfs(String s,int n){if(s.length()==n){list.add(s);return;}for(int i = 0;i<3;i++){if(s.equals("")){s+=sAbc[i];dfs(s,n);s=s.substring(0,s.length()-1);}else if(!s.substring(s.length()-1).equals(sAbc[i])){s+=sAbc[i];dfs(s,n);s=s.substring(0,s.length()-1);}}}
}

LeetCode 开心字符串相关推荐

  1. leetcode1415. 长度为 n 的开心字符串中字典序第 k 小的字符串(回溯)

    一个 「开心字符串」定义为:仅包含小写字母 ['a', 'b', 'c']. 对所有在 1 到 s.length - 1 之间的 i ,满足 s[i] != s[i + 1] (字符串的下标从 1 开 ...

  2. LeetCode 43. 字符串相乘(大数乘法)

    文章目录 1. 题目 2. 小学竖式乘法 2.1 普通版 2.2 优化版 1. 题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示 ...

  3. 51 -leetcode 38 -字符串

    // LeetCode 38 字符串 to_string int to string char 直接变为string //边界情况 for int i=0 i<.size() 比较的活 i+1 ...

  4. [DFA|有限状态机] leetcode 8 字符串转换整数(atoi)

    [DFA|有限状态机] leetcode 8 字符串转换整数(atoi) 1.题目 题目链接 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符, ...

  5. 弟中弟的Leetcode总结——字符串类(一)

    弟中弟的Leetcode总结--字符串类(一) 题目描述 Longest Substring Given a string, find the length of the longest substr ...

  6. ⭐算法入门⭐《模拟》中等01 —— LeetCode 8. 字符串转换整数

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   实现一个myAtoi( ...

  7. c++ 32位有符号的整数_【LeetCode】字符串分类字符串转换整数 (atoi)

    " 摘要:本文主要讲述LeetCode字符串分类字符串转换整数 (atoi)解法.主要内容如下: 题目 示例 解题 " 01 - 题目 请你来实现一个 atoi 函数,使其能将字符 ...

  8. 32位有符号整数_[LeetCode] 8. 字符串转换整数 (atoi)

    题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...

  9. leetcode 387. 字符串中的第一个唯一字符(hash)

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 示例: s = "leetcode" 返回 0 s = "loveleetcode ...

最新文章

  1. Hadoop + MapReduce 端口自定义配置
  2. 如何处理win10系统内置Linux系统闪退问题
  3. 51nod挑的部分5级题
  4. 新建文件夹html文件,JS实现新建文件夹功能
  5. mysql 表中添加唯一约束
  6. CV之YOLOv3:深度学习之计算机视觉神经网络Yolov3-5clessses训练自己的数据集全程记录
  7. win10子系统linux编译ffmpeg
  8. 三款最安全的Linux操作系统(适合从事网络安全工作者使用)
  9. 常见电容器图片_工业机器视觉的常见应用与施努卡VisionMax视觉系统介绍
  10. JavaScript中函数式编程的原理
  11. java给byte赋值_关于JAVA中Byte数据类型二进制赋值运算报错问题
  12. 关于网站速度优化的一点建议
  13. 根据奖品权重计算中奖概率实现抽奖的方法
  14. 如何让PPT给你的presentation加分
  15. Android Studio 按钮样式实现
  16. 社会信用编码的验证(18位)
  17. AngelScript -- C++程序最好的脚本语言
  18. 线性与非线性规划:随机方向法
  19. sql实现查询学习了所有课程的学生信息
  20. java使用world模板动态生成PDF文件

热门文章

  1. ultra fast lane detection数据集制作
  2. 原创|智能交通2022第十六届北京国际数字交通展览会
  3. 【蓝旭】第五周预习博客
  4. web前端就业怎么样
  5. 怎么复制cmd显示的内容?怎么把外面的东西复制到cmd里面?
  6. 用计算机发传真,怎么使用win7电脑发传真|使用win7电脑发传真的详细步骤
  7. 【UE4教程】Unreal 4.22 UI显示指定物体-实时渲染
  8. linux 编译符号 u,Linux下缩小可执行程序 (一) 非使用符号的去除
  9. 号称下一代消息中间件!来看看它有多牛逼
  10. 50TB ExaDrive SSD投入商用,EB级容量闪存系统来日可期