剑指offer 面试题55 字符流中第一个不重复的字符
来源:互联网 发布:图160和b1b数据对比 编辑:程序博客网 时间:2024/06/07 18:53
剑指offer 面试题55 字符流中第一个不重复的字符
题目:
请实现一个函数用来找出字符流中第一个只出现一次的字符。
例如,当从字符流中只读出前两个字符 “goo” 时,第一个只出现一次的字符是 “g”,
当从该字符串中读出前六个字符 “google” 时,第一个只出现一次的字符是 “l”。
package algorithm.foroffer.top60;import org.junit.Test;/** * description: * * @author liyazhou * @create 2017-06-18 10:51 * * 题目: * 请实现一个函数用来找出字符流中第一个只出现一次的字符。 * 例如,当从字符流中只读出前两个字符 "go" 时,第一个只出现一次的字符是 "g", * 当从该字符串中读出前六个字符 "google" 时,第一个只出现一次的字符是 "l"。 * * 考查点: * 1. 字符串 * * 思路: * 0。要做到: * 一、统计字符出现的次数; * 二、标记只出现一次的字符的先后位置 * 1. 使用长度为 256 的整型数组,数组元素的值是字符出现的"先后顺序",如果出现多次标记为-1,否则标记为 order * (order初始值为 1,随输入的字符流个数增长) * 2. 查找最小 order 出现的位置,也即是数组中不为0或-1的所有元素中的最小值。即是最小的order, * 对应下标就是字符流中第一个只出现一次的字符。 * */public class Test55 { public char firstCharAppearingOnce(char[] chars){ // if (chars == null || chars.length == 0) throw new IllegalArgumentException("Argument is illegal."); if (chars == null) throw new IllegalArgumentException("Argument is illegal."); int order = 1; int[] occurence = new int[256]; for (int idx : chars) { if (idx < 0 || idx > 255) throw new IllegalArgumentException(); if (occurence[idx] == 0) occurence[idx] = order; else occurence[idx] = -1; order ++; } char ch = '\0'; int minFlag = chars.length + 1; for (int i = 0; i < occurence.length; i ++){ if (occurence[i] >= 1 && occurence[i] < minFlag){ ch = (char)i; minFlag = occurence[i]; } } return ch; } @Test public void test(){ String[] strings = { "", "g", "go", "goo", "goog", "googl", "google", }; for (String string : strings){ char[] chars = string.toCharArray(); String line = String.format("%s :: %s", string, firstCharAppearingOnce(chars)); System.out.println(line); } }}
阅读全文
1 0
- 《剑指Offer》学习笔记--面试题55:字符流中第一个不重复的字符
- 【剑指Offer学习】【面试题55:字符流中第一个不重复的字符】
- 剑指offer-面试题55:字符流中第一个不重复的字符
- 《剑指Offer》面试题55:字符流中第一个不重复的字符
- 剑指offer--面试题55:字符流中第一个不重复的字符
- 剑指Offer面试题55:字符流中第一个不重复的字符 Java实现
- 剑指offer-面试题55-字符流中第一个不重复的字符
- 剑指offer 面试题55 字符流中第一个不重复的字符
- 【剑指Offer】面试题55:字符流中第一个不重复的字符
- 剑指offer——面试题55:字符流中第一个不重复的字符
- 剑指offer 面试题55 字符流中第一个不重复的字符(push_back+resize出问题)
- 剑指offer面试题55 字符流中第一个不重复的字符(Java实现)
- 剑指offer_面试题55_字符流中第一个不重复的字符 *
- 面试题55:字符流中第一个不重复的字符
- 面试题55:字符流中第一个不重复的字符
- 剑指offer 55-字符流中第一个不重复的字符
- 《剑指offer》:[55]字符流中第一个不重复的字符
- 【剑指offer】题55:字符流中第一个不重复的字符
- 1011. Cut Rectangles (35)解题报告
- CF816B-Karen and Coffee
- 计算机网络总结之网络层
- Java 8 Stream Collectors groupingBy 示例
- 日语语法(四):形容词
- 剑指offer 面试题55 字符流中第一个不重复的字符
- linux内核编译相关(TK1)
- 兰顿蚂蚁(模拟)-蓝桥杯
- java中print printf println
- [实验]虚拟实验环境中创建内网yum仓库
- 输出该数二进制表示中1的个数
- Codeforces 797E Array Queries
- Linux之shell基础
- 561. Array Partition I