【Py/Java/C++三种语言详解】LeetCode每日一题240120【模拟】LeetCode2788、按分隔符拆分字符串

发布时间:2024年01月20日

题目链接

LeetCode2788、按分隔符拆分字符串

题目描述

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

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

注意

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

示例 1

输入:words = [“one.two.three”,“four.five”,“six”], separator = “.”
输出:[“one”,“two”,“three”,“four”,“five”,“six”]
解释:在本示例中,我们进行下述拆分: “one.two.three” 拆分为 “one”, “two”, “three” “four.five” 拆分为 “four”, “five” “six” 拆分为 “six” 因此,结果数组为 [“one”,“two”,“three”,“four”,“five”,“six”] 。

示例 2

输入:words = [“$easy$”,“$problem$”], separator = “$”
输出:[“easy”,“problem”]
解释:在本示例中,我们进行下述拆分: “$easy$” 拆分为 “easy”(不包括空字符串) “$problem$” 拆分为 “problem”(不包括空字符串) 因此,结果数组为 [“easy”,“problem”] 。

示例 3

输入:words = [“|||”], separator = “|”
输出:[]
解释:在本示例中,“|||” 的拆分结果将只包含一些空字符串,所以我们返回一个空数组 [] 。

提示

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

解题思路

很简单的题目,直接调API即可。注意分割后得到的空串需要排除掉。

代码

Python

class Solution:
    def splitWordsBySeparator(self, words: List[str], separator: str) -> List[str]:
        ans = list()
        for word in words:
            # 直接使用字符串的split()方法
            new_list = word.split(separator)
            # 注意排除掉空串,排除空串后的数组加在ans后面
            ans += [new for new in new_list if new]
        return ans

Java

public class Solution {
    public List<String> splitWordsBySeparator(List<String> words, char separator) {
        List<String> ans = new ArrayList<>();
        for (String word : words) {
            // 使用 StringTokenizer 实现分割
            StringTokenizer tokenizer = new StringTokenizer(word, String.valueOf(separator));
            while (tokenizer.hasMoreTokens()) {
                String newWord = tokenizer.nextToken();
                // 注意排除掉空串
                if (!newWord.isEmpty()) {
                    ans.add(newWord);
                }
            }
        }
        return ans;
    }
}

C++

class Solution {
public:
    std::vector<std::string> splitWordsBySeparator(std::vector<std::string>& words, char separator) {
        std::vector<std::string> ans;
        for (const std::string& word : words) {
            // 使用字符串流实现分割
            std::istringstream iss(word);
            std::string newWord;
            while (getline(iss, newWord, separator)) {
                // 注意排除掉空串
                if (!newWord.empty()) {
                    ans.push_back(newWord);
                }
            }
        }
        return ans;
    }
};

时空复杂度

时间复杂度:O(NM)

空间复杂度:O(1)


华为OD算法/大厂面试高频题算法练习冲刺训练

  • 华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

  • 课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

  • 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

  • 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁

  • 可上全网独家的欧弟OJ系统练习华子OD、大厂真题

  • 可查看链接 大厂真题汇总 & OD真题汇总(持续更新)

  • 绿色聊天软件戳 od1336了解更多

文章来源:https://blog.csdn.net/weixin_48157259/article/details/135709686
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。