Leetcode 2788. 按分隔符拆分字符串

在这里插入图片描述
我们可以先自己模拟一下分隔字符串的过程。如果只是简单的,遇到分隔符,将分隔符前后的子串加入结果的List,那么很显然并没有考虑到一个String中有多个字符串的情况。一种比较容易想到的方法是:

  1. 先对List中每个字符串遍历;
  2. 对于每个字符串内部,维护一个缓冲区;
  3. 遍历一个字符串时,若遇到分隔符,且缓冲区不为空,则将缓冲区内容加入result,并清空缓冲区;若未遇到分隔符,则将当前字符加入缓冲区;
  4. 遍历完该字符串后,还要检查一边缓冲区,若不为空,将剩余字符串也加入result;
  5. 对每个字符串重复2-4步的操作即可。

实现代码如下:

class Solution {
 public List<String> splitWordsBySeparator(List<String> words, char separator) {
    	List<String> res = new ArrayList<>();
    	for(String str:words) {
    		//相当于为每个单词维护一个临时缓冲区
    		StringBuilder sb = new StringBuilder();
    		for(int i=0;i<str.length();i++) {
    			//若遇到分隔符,且缓冲区不为空
    			//将缓冲区内容加入res,清空缓冲区
    			if(str.charAt(i)==separator) {
    				if(sb.length()>0) {
    					res.add(sb.toString());
    					sb.setLength(0);
    				}
    			}
    			//若未遇到分隔符,则当前字符加入缓冲区sb
    			else {
    				sb.append(str.charAt(i));//这个append方法是用StringBuilder的关键
    			}
    		}
    		//遍历完成后,若缓冲区还有剩余字符,全部加入res
    		if(sb.length()>0) {
    			res.add(sb.toString());
    		}
    	}
    	return res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

maplesea7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值