2788. 按分隔符拆分字符串

按分隔符拆分字符串(力扣)

给你一个字符串数组 words 和一个字符 separator ,请你按 separator 拆分 words 中的每个字符串。

返回一个由拆分后的新字符串组成的字符串数组,不包括空字符串 。

注意

separator 用于决定拆分发生的位置,但它不包含在结果字符串中。
拆分可能形成两个以上的字符串。
结果字符串必须保持初始相同的先后顺序。

提示:

1 <= words.length <= 100
1 <= words[i].length <= 20
words[i] 中的字符要么是小写英文字母,
要么就是字符串 ".,|$#@" 中的字符(不包括引号)
separator 是字符串 ".,|$#@" 中的某个字符(不包括引号)

方式一:使用函数

思路

可以使用split()函数来根据指定的分隔符将字符串拆分为字符串数组,但是记得给一些字符进行转义。如果是空串的话,则不加入答案列表中。

public String[] split(String regex)

测试代码

class Solution {
    public List splitWordsBySeparator(List words, char  separator) {
        List ans=new ArrayList<>();
        String regex=null;
        //[.,|$#@]
        //有些字符需要转义,有些就不需要
    switch (separator){
            case '.':regex="\\.";
            break;
            case ',':regex=",";
            break;
            case '|':regex="\\|";
            break;
            case '$':regex="\\$";
            break;
            case '#' :regex="#";
            break;
            case '@':regex="@";
            break;
        };
        for (String s:words) {
            //通过split函数来处理
            String[] parts = s.split(regex);
            for (String s2:parts) {
                //为空的情况,不添加
                if (s2.equals(""))continue;
                ans.add(s2);
            }
        }
        return ans;
    }
}

复杂度

时间复杂度:可以近似看作O(n*m)。n是字符串列表中字符串的数量,m是每个字符串的平均长度。
空间复杂度:可以看作O(n),其中n是输入字符串列表的总长度。

运行结果

2788. 按分隔符拆分字符串_第1张图片

方式二:模拟

思路

我们遍历每一个字符串,通过substring截取一个字母然后来比较,我们需要维护两个指针,left和right初始为0,他们两个的中间就是一个一个拆分的答案,相等的时候我们更新指针right,并截取答案字符串,判断是否为空,不为则添加,然后把右指针的值赋值给left,继续遍历直到下一个分隔符。

还没有完,存在漏掉的情况,比如说:"one.two.three"这个字符串,当索引走到最后时right的值还在7,没有更新,所以判断 if (right

还有漏掉的right如果等于0情况,如果left也为0,说明没有走,如果left>0说明是这种情况:
words =[“#,”],separator =“#”
所以直接返回substring(left)即可

以上都不满足,说明没有分隔符,属于没走,直接添加即可,记得每次添加的时候都要判断是否为空。

测试代码


class Solution{
    public List splitWordsBySeparator(List words, char  separator) {
        List ans=new ArrayList<>();
        int left=0;
        int right=0;
        for (String s:words) {
            for (int i = 0; i right){
                //当索引为0就出现分隔符的时候
               String s2= s.substring(left);
                if (!s2.equals("")) ans.add(s2);
            }
            else ans.add(s);
            right=0;left=0;
        }
        return ans;
    }
}

复杂度

时间复杂度为O(m* n)。
空间复杂度为O(m)。

测试结果

2788. 按分隔符拆分字符串_第2张图片

你可能感兴趣的:(leetcode题目,算法)