大厂面试真题详解:分割字符串

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

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

样例1

 

输入: "123" 
输出: [["1","2","3"],["12","3"],["1","23"]] 
  • 1.
  • 2.

样例2

 

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

算法:DFS

由于本题可以选择在一个字符或两个相邻字符之后拆分字符串,且最后需输出所有可能的组合,即每次都需要把整个字符串按照特定要求切分完毕,可以想到利用递归dfs来完成;

算法步骤

对字符串进行深度优先搜索,当前位置达到字符串末尾作为边界。搜索时有两种情况:

切割当前的1个字符:

  • 将这1个字符单独作为字符串存入列表
  • 当前位置步进1

切割当前的连续2个字符(需满足当前位置不是字符串末尾):

  • 将连续2个字符保存为字符串存入列表
  • 当前位置步进2

复杂度分析

  • 时间复杂度:O(2^n), n为字符串长度除了字符串最后一位,其他位置都有两种切割方式
  • 空间复杂度:O(2^n^2),n为字符串长度存储所有情况需要所有切分方式*n 的空间

 

public class Solution { 
    /* 
     * @param : a string to be split 
     * @returnall possible split string array 
     */ 
    public List<List<String>> splitString(String s) { 
        List<List<String>> result = new ArrayList<>(); 
        dfs(s, 0, new ArrayList<>(), result); 
        return result; 
    } 
 
    private void dfs(String s, int index, List<String> current, List<List<String>> result) { 
        if (index == s.length()) { 
            result.add(new ArrayList<>(current)); 
            return
        } 
        // 分割1个字符 
        current.add(String.valueOf(s.charAt(index))); 
        dfs(s, index + 1, current, result); 
        current.remove(current.size() - 1); 
        // 分割2个字符 
        if (index < s.length() - 1) { 
            current.add(s.substring(indexindex + 2)); 
            dfs(s, index + 2, current, result); 
            current.remove(current.size() - 1); 
        } 
    } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.

 

责任编辑:未丽燕 来源: 今日头条
相关推荐

2018-05-21 20:45:45

2009-08-07 14:15:21

C#字符串分割

2010-11-26 10:43:48

MySQL分割字符串

2021-03-08 08:23:24

Java字符串截取

2011-08-10 18:47:18

Cocoa字符串

2021-09-07 06:40:25

贪心平衡字符串

2010-11-26 13:27:41

MySQL存储过程

2009-12-01 09:18:50

PHP分割字符串

2010-10-09 11:43:10

MYSQL字符串

2022-12-06 08:27:50

Bash脚本字符串

2011-09-01 21:41:42

SQL Server把字符分割成两个字符串

2010-07-14 12:57:59

Perl字符串

2023-12-15 09:49:54

回溯解决组合问题数组

2023-02-26 00:00:02

字符串分割String

2024-06-26 08:18:08

ES6模板字符串

2010-07-14 16:21:48

Perl

2021-12-24 11:59:47

数据结构算法字符串

2021-04-15 00:16:18

JavaString字符串

2020-08-25 08:56:55

Pythonawk字符串

2013-04-28 10:36:00

Obj-C数组Obj-C字符串拼接与
点赞
收藏

51CTO技术栈公众号