【每日一题】按分隔符拆分字符串

Tag

【遍历】【getline】【字符串】【2024-01-20】


题目来源

2788. 按分隔符拆分字符串


解题思路

方法一:遍历

思路

分隔符在字符串开始和结束位置时不需要处理。

分隔符出现在字符串中间时,记录上一个分隔符到当前分隔符之间的字符串或者到字符串结尾的字符串,非空即可加入到答案数组中。

算法

class Solution {
public:
    vector<string> splitWordsBySeparator(vector<string>& words, char separator) {
        vector<string> res;
        for (auto& word : words) {
            word += '*';
            string tmp = "";
            int n = word.size();
            for (int i = 0; i < n; ++i) {
                // 分隔符在字符串开始和结尾处不用处理
                if (word[i] == separator && (i == 0 || i == n-1)) continue; 
                // 分隔符只在字符串中间出现的情况
                if (word[i] == separator || word[i] == '*') {
                    if (!tmp.empty()) {
                        res.push_back(tmp);
                        tmp = "";
                    }  
                }
                else {
                    tmp += word[i];
                }
            }
        }
        return res;
    }
};

复杂度分析

时间复杂度: O ( m × n ) O(m \times n) O(m×n) m m m 为字符串数组 words 的长度, n n n 为字符串 word 的长度。

空间复杂度: O ( n ) O(n) O(n)

方法二:getline

思路

使用 stringstream 中的 getline 操作,getline有一个重载后的版本为 getline (istream& is, string& str, char delim) 可以将输入的字符串 is 根据分隔符 delim 分割然后保存为 str

算法

class Solution {
public:
    vector<string> splitWordsBySeparator(vector<string>& words, char separator) {
        vector<string> res;
        for (const auto& word : words) {
            stringstream ss(word);
            string sub;
            while (getline(ss, sub, separator)) {
                if (!sub.empty()) {
                    res.push_back(sub);
                }
            }
        }
        return res;
    }
};

复杂度分析

时间复杂度: O ( m × n ) O(m \times n) O(m×n) m m m 为字符串数组 words 的长度, n n n 为字符串 word 的长度。

空间复杂度: O ( n ) O(n) O(n)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

相关推荐

  1. leetcode-2788分隔符字符串

    2024-01-22 08:40:04       37 阅读
  2. leetcode 2788分隔符字符串

    2024-01-22 08:40:04       38 阅读
  3. 【力扣每日】力扣2788用分隔符字符串

    2024-01-22 08:40:04       37 阅读
  4. 力扣2788-分隔符字符串

    2024-01-22 08:40:04       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-22 08:40:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-22 08:40:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-22 08:40:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-22 08:40:04       20 阅读

热门阅读

  1. 用大模型增强数据分析应用

    2024-01-22 08:40:04       33 阅读
  2. Spring三级缓存

    2024-01-22 08:40:04       34 阅读
  3. 微前端:一种新型的前端架构方法

    2024-01-22 08:40:04       34 阅读
  4. XFTP会话日志

    2024-01-22 08:40:04       29 阅读
  5. ORACLE交集运算符是INTERSECT

    2024-01-22 08:40:04       27 阅读
  6. @RequestBody注解基础

    2024-01-22 08:40:04       27 阅读
  7. 刚学习的最长不递增子序列的新求法

    2024-01-22 08:40:04       36 阅读
  8. vue组件扩展

    2024-01-22 08:40:04       32 阅读
  9. MetaGPT中提到的SOP

    2024-01-22 08:40:04       36 阅读