No.157 Read 用 Read4 读取 N 个字符

题目

  • 给你一个文件,并且该文件只能通过给定的 read4 方法来读取,请实现一个方法使其能够读取 n 个字符。

  • read4 方法:
  • API read4 可以从文件中读取 4 个连续的字符,并且将它们写入缓存数组 buf 中。
  • 返回值为实际读取的字符个数。
  • 注意 read4() 自身拥有文件指针,很类似于 C 语言中的 FILE *fp 。

  • read4 的定义:
  • 参数类型: char[] buf
  • 返回类型: int
  • 注意: buf[] 是目标缓存区不是源缓存区,read4 的返回结果将会复制到 buf[] 当中。

  • 下列是一些使用 read4 的例子:
  • File file("abcdefghijk"); // 文件名为 "abcdefghijk", 初始文件指针 (fp) 指向 'a'
  • char[] buf = new char[4]; // 创建一个缓存区使其能容纳足够的字符
  • read4(buf); // read4 返回 4。现在 buf = "abcd",fp 指向 'e'
  • read4(buf); // read4 返回 4。现在 buf = "efgh",fp 指向 'i'
  • read4(buf); // read4 返回 3。现在 buf = "ijk",fp 指向文件末尾

  • read 方法:

  • 通过使用 read4 方法,实现 read 方法。该方法可以从文件中读取 n 个字符并将其存储到缓存数组 buf 中。您 不能 直接操作文件。

  • 返回值为实际读取的字符。


  • read 的定义:

  • 参数类型: char[] buf, int n
  • 返回类型: int

  • 注意: buf[] 是目标缓存区不是源缓存区,你需要将结果写入 buf[] 中。

示例

  • 输入: file = "abc", n = 4
  • 输出: 3
  • 解释: 当执行你的 read 方法后,buf 需要包含 "abc"。 文件一共 3 个字符,因此返回 3。
  • 注意 "abc" 是文件的内容,不是 buf 的内容,buf 是你需要写入结果的目标缓存区。

  • 输入: file = "abcde", n = 5
  • 输出: 5
  • 解释: 当执行你的 read 方法后,buf 需要包含 "abcde"。文件共 5 个字符,因此返回 5。

  • 输入: file = "abcdABCD1234", n = 12
  • 输出: 12
  • 解释: 当执行你的 read 方法后,buf 需要包含 "abcdABCD1234"。文件一共 12 个字符,因此返回 12。

  • 输入: file = "leetcode", n = 5
  • 输出: 5
  • 解释: 当执行你的 read 方法后,buf 需要包含 "leetc"。文件中一共 5 个字符,因此返回 5。

代码

No.158 Read 用 Read4 读取 N 个字符 II

题目

  • 给你一个文件,并且该文件只能通过给定的 read4 方法来读取,请实现一个方法使其能够读取 n 个字符。
  • 注意:你的 read 方法可能会被调用多次。
  • read4 和 read 的定义与No.157一致。

示例

  • File file("abc");
  • Solution sol;
  • // 假定 buf 已经被分配了内存,并且有足够的空间来存储文件中的所有字符。
  • sol.read(buf, 1); // 当调用了您的 read 方法后,buf 需要包含 "a"。 一共读取 1 个字符,因此返回 1。
  • sol.read(buf, 2); // 现在 buf 需要包含 "bc"。一共读取 2 个字符,因此返回 2。
  • sol.read(buf, 1); // 由于已经到达了文件末尾,没有更多的字符可以读取,因此返回 0。

  • File file("abc");
  • Solution sol;
  • sol.read(buf, 4); // 当调用了您的 read 方法后,buf 需要包含 "abc"。 一共只能读取 3 个字符,因此返回 3。
  • sol.read(buf, 1); // 由于已经到达了文件末尾,没有更多的字符可以读取,因此返回 0。

注意

你不能直接操作该文件,文件只能通过 read4 获取而 不能 通过 read。

read 函数可以被调用 多次。

你可以假定目标缓存数组 buf 保证有足够的空间存下 n 个字符。

保证在一个给定测试用例中,read 函数使用的是同一个 buf。

思路

代码

No.159 LengthOfLongestSubstringTwoDistinct 至多包含两个不同字符的最长子串

题目

  • 给定一个字符串 s ,找出至多包含两个不同字符的最长子串 t 。

示例

  • 输入: "eceba"
  • 输出: 3
  • 解释: t 是 "ece",长度为3。

  • 输入: "ccaabbb"
  • 输出: 5
  • 解释: t 是 "aabbb",长度为5。

思路

代码

最新文章

  1. POJ2115 C Looooops[扩展欧几里得]
  2. android 手机开启debug日志
  3. Apache +Tomcat的负载均衡与集群配置
  4. R12.2.0 buildStage 运行结果
  5. UltraEdit常用配置&搭建Java/C开发环境
  6. js中的访问器属性中的getter和setter函数实现数据双向绑定
  7. 软件工程(GZSD2015)第二次作业小结
  8. 如何查找元素对应事件的js代码,检测定位js事件
  9. eclpse:安装explorer或eExplorer插件
  10. EntityFramework Core笔记:入门(1)
  11. 1.maven安装配置
  12. Redis学习系列三List列表
  13. 字符串日期转化以及yyyy-MM-dd HH:mm:ss大小写解释
  14. 详解Vue中的nextTick
  15. JS 拦截/捕捉 全局错误 全局Error onerror
  16. 第二篇:呈现内容_第三节:CompositeControl呈现
  17. 通信网络 2G 3G 4G 和路由器2.4G 5G的区分和关系
  18. Java总结:Java 流(Stream)、文件(File)和IO
  19. 【转】redis windows环境搭建
  20. 【bzoj3125】CITY 插头dp

热门文章

  1. 在MFC做DLL动态链接库时,使用boost,出现断言错误
  2. Web前端工程师需要注意的开发规范有哪些?
  3. Maven - 工作原理
  4. ETL工具对比
  5. shell教程<入门篇>
  6. 浅谈无字母数字构造webshell
  7. 自定义View不显示的问题
  8. Java集合--Map
  9. (转)Java并发编程:阻塞队列
  10. JDBC,ResultSet对像多次使用后再关闭的问题