zoukankan      html  css  js  c++  java
  • 【Lintcode】680. Split String把原有string分拆成小的string

    描述
    给一个字符串,你可以选择在一个字符或两个相邻字符之后拆分字符串,使字符串由仅一个字符或两个字符组成,输出所有可能的结果

    样例
    样例1

    输入: "123"
    输出: [["1","2","3"],["12","3"],["1","23"]]
    样例2

    输入: "12345"
    输出: [["1","23","45"],["12","3","45"],["12","34","5"],["1","2","3","45"],["1","2","34","5"],["1","23","4","5"]

    思路:就是dfs。以前写过:后面的子串长度i + 1,会带着pos + 1。所以只要for一次就行了。

    变形:

    第二题:给一个 string, 随意添加空格,把原有 string 分拆成小的string,输出所有可能结果。
    比如 "abc", 分拆成 [["ab","c"], ["a","bc"], ["a","b","c"]]

    长度可以不限于<=2

    参考和感谢:https://blog.csdn.net/qq_46105170/article/details/105549283

    import java.util.ArrayList;
    import java.util.List;
    
    public class Solution {
        /*
         * @param : a string to be split
         * @return: all possible split string array
         */
        public List<List<String>> splitString(String s) {
            // write your code here
            List<List<String>> res = new ArrayList<>();
            dfs(s, 0, new ArrayList<>(), res);
            return res;
        }
        
        // 从s的s[pos]开始,向后分割出一个或两个字符的子串,加入cur;res储存最后的答案
        private void dfs(String s, int pos, List<String> cur, List<List<String>> res) {
            // 如果pos到达了字符串尾,说明已经切割完毕,则将切割的结果加入res
            if (pos == s.length()) {
                res.add(new ArrayList<>(cur));
                return;
            }
            // 开始枚举从pos后分割长度为1或2的子串,加入cur,并进入下一层递归
            // 递归结束后要记得回溯,恢复现场
            for (int i = pos; i < pos + 2 && i < s.length(); i++) {
                cur.add(s.substring(pos, i + 1));
                dfs(s, i + 1, cur, res);
                cur.remove(cur.size() - 1);
            }
        }
    }
    ————————————————
    版权声明:本文为CSDN博主「记录算法」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_46105170/article/details/105549283
    View Code
  • 相关阅读:
    IP地址和进制转换
    Cisco交换机常见配置
    macOS上的autoreconf错误导致无法安装问题
    LG P5147 随机数生成器
    LG P1879 [USACO06NOV]Corn Fields G
    LG P5017 [NOIP2018]摆渡车
    mysql触发器trigger详解
    MybatisPuls中QueryWrapper的select、update的用法
    @Transactional各属性详解
    Linux如何查看进程、杀死进程、启动进程等常用命令(包括常用的命令,如查看文件,修改文件读写权限、寻找文件等)
  • 原文地址:https://www.cnblogs.com/immiao0319/p/14451743.html
Copyright © 2011-2022 走看看