Sunday, April 8, 2018

[LeetCode]Read N Characters Given Read4 II - Call multiple times


Read4 I的区别是,这里在一个test case当中read4可能会被call多次,那么在这里我们就得合理地维护好buffer。我们维护一个长度为4的buffer来存可能溢出的char,不能被4整除的部分,我们还是要从stream中读4个char,那么剩下的部分我们先存到buffer等以后读即可。具体到每一次read n个char的操作:

  • 我们首先check buffer
    • 如果buffer里的char比n多,我们从buffer里读出n个char,并且更新buffer,将剩下的char平移到buffer开头
    • 如果n大于或者等于buffer的size,我们把buffer里的char全部读出来并且重置buffer
  • 我们接着处理能被4整除的部分,每次从stream中读4个char,append到输出的data,注意是否读到stream的末尾,如果到了我们直接return
  • 最后处理不能被4整除的部分,我们从buffer中读字符,假设读出len个字符,不能被4整除的部分有m个字符
    • 如果m < len,不管这一次我们有没有读到stream的末尾,我们还是有len - m个字符要存在buffer里
    • 如果m >= len,显然代表我们读到了末尾,对应处理即可。
代码如下:


No comments:

Post a Comment