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

Leetcode 2788. 按分隔符拆分字符串_第1张图片
我们可以先自己模拟一下分隔字符串的过程。如果只是简单的,遇到分隔符,将分隔符前后的子串加入结果的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;
    }
}

你可能感兴趣的:(leetcode,算法,职场和发展)