力扣2788用分隔符拆分字符串
题目来源
题目概述
给你一个字符串数组 words 和一个字符 separator ,请你按 separator 拆分 words 中的每个字符串。
返回一个由拆分后的新字符串组成的字符串数组,不包括空字符串 。
注意
separator 用于决定拆分发生的位置,但它不包含在结果字符串中。 拆分可能形成两个以上的字符串。 结果字符串必须保持初始相同的先后顺序。
解题思路
记录相邻两个分隔符的位置,截取子串添加到结果集中。
代码实现
java实现
public class Solution {
public List<String> splitWordsBySeparator(List<String> words, char separator) {
List<String> result = new ArrayList<>();
for (String word : words) {
// 前一个分隔符
int last = 0;
for (int i = 0; i < word.length(); i++) {
char current = word.charAt(i);
// 遇到后一个分隔符
if (current == separator) {
// 不是相同的位置就可以分割了
if(i > last){
result.add(word.substring(last , i));
}
last = i + 1;
}
}
// 最后如果还有一个,继续分割
if (last < word.length()) {
result.add(word.substring(last, word.length()));
}
}
return result;
}
}
c++实现
class Solution {
public:
vector<string> splitWordsBySeparator(vector<string>& words, char separator) {
vector<string> result;
for (string word : words) {
// 前一个分隔符位置
int last = 0;
for (int i = 0; i < word.length(); i++) {
char current = word[i];
// 遇到下一个分隔符
if (current == separator ) {
if (i > last) {
result.push_back(word.substr(last, i - last));
}
last = i + 1;
}
}
// 末尾可能有一个在for循环中拿不到
if (last < word.length()) {
result.push_back(word.substr(last, word.length() - last));
}
}
return result;
}
};