算法思维(递归)训练:输出字符串长度为M的子序列
来源:互联网 发布:beast成员关系解析知乎 编辑:程序博客网 时间:2024/06/09 12:37
题目
从长度为N的字符串中随机选出M个字符(不打破原有顺序)并输出。
思路
此选择问题可分解为:
1. 选择当前字符,并在剩余字符中选择M-1个
2. 不选择当前字符,在剩余字符中选择M个
这就得到了子结构,再考虑出口、何时输出字符串、如果存储之前选择的字符串等细节问题就能写出代码。
代码
/** * 输出长度为N的字符串的所有长度为M的子序列 * */public class RandomStrCharCombine { public static void main(String[] args) { String s = "ABCDE"; M = 3; cache = new char[s.length()]; select(s.toCharArray(), 0, M); } //存储选择的字符 static char[] cache; //需要选取的字符的个数 static int M; /** * * @param arr 字符数组 * @param index 开始索引 * @param num 选出字符数 */ private static void select(char[] arr, int index, int num) { //数量已经选够,输出cache if (num == 0) { System.out.println(String.valueOf(cache, 0, M)); return; } if (index == arr.length) { return; } //不选索引处的字符,在剩余字符里面选择num个 select(arr, index + 1, num); //取当前字符,并从剩余字符里面选num-1个 cache[M - num] = arr[index]; select(arr, index + 1, num - 1); }}
阅读全文
0 0
- 算法思维(递归)训练:输出字符串长度为M的子序列
- 算法思维(递归)训练:输出字符串字符的全排列
- 递归问题之一:给定一字符串,输出字符串中所有字符子串的各种组合形式,长度为一个字符到字符串的长度,忽略排序
- 求两个字符串的最大公共子序列(可以不连续)的长度,并输出这个子序列
- 动态规划---实现输出最大公共子序列的长度以及输出最大子字符串(java语言描述)
- java动态规划 实现输出最大公共子序列的长度以及输出最大子字符串
- [算法] 输出 字符串的全部子组合 [dfs - 递归神技]
- 递归求字符串子序列Java算法
- 【训练题】航线设计 | 使用最长上升子序列(LIS)长度的O(nlogn)算法优化
- C++ 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)输出最长子序列的长度及对应的子序列
- 蓝桥杯常用算法知识点:【递归】求两个串的最大公共子序列的长度
- 【算法】最长递增子序列的长度
- 最大连续长度不超过m的子序列和
- 长度不超过m的最大连续子序列(dp + 单调队列)
- 字符串的全排列【递归算法训练】
- 对称子字符串的最大长度[算法]
- 面试训练对称子字符串的最大长度
- 最长上升子序列(LIS)长度 O(nlogn)算法 hdu1950为例
- Python基础-高级-生成器-Generator
- Java解析JSON格式数据
- DDL和DML区别
- KOL的知识变现
- TestNG API常用参数解释
- 算法思维(递归)训练:输出字符串长度为M的子序列
- oracle错误密码导致library cache lock
- Ubuntu的web服务器搭建系列之MySQL(JDK+Tomcat+MySQL+Nginx+Redis+NodeJS)
- 工作了3年的JAVA程序员应该具备什么技能
- 扩展欧几里得的 ——要求第一个数为正
- 无法应用原保存的显示器配置
- 常见的http状态码(持续更新)
- 算式表达式的实现
- LWC 62:743. Network Delay Time