从字符串中查找第一次出现一次的字符
2017-02-04 14:40
281 查看
美团面试手写
正确的思路为:将字符对应的asc码当为数组角标,一次循环计算所有字符出现次数,再一次字符顺序的循环,查找出字符出现为1次的返回。
注意点:
char类型占1个字符,2个字节,2*8位,有2^16 = 65536种可能,范围 0 - 65535,但是抛去转义等字符,键盘上输入的范围是 0 - 255 共256种可能。所以数组长度为256足以。
第一次循环计算所有字符出现次数。如何按时间查找?这个问题我想了半天,后来才发现按照字符顺序查找就可以了。
部分代码如下:
github:https://github.com/liujinjin777/liujinjintest.git
正确的思路为:将字符对应的asc码当为数组角标,一次循环计算所有字符出现次数,再一次字符顺序的循环,查找出字符出现为1次的返回。
注意点:
char类型占1个字符,2个字节,2*8位,有2^16 = 65536种可能,范围 0 - 65535,但是抛去转义等字符,键盘上输入的范围是 0 - 255 共256种可能。所以数组长度为256足以。
第一次循环计算所有字符出现次数。如何按时间查找?这个问题我想了半天,后来才发现按照字符顺序查找就可以了。
部分代码如下:
/** * 查找出第一次出现一个的字符 * * @param str 例如: asd123sdwer2423sdsd * @return 返回: a */ public static String getOnlyOneFristStr(String str){ if(str == null || "".equals(str.trim()) ) return null; char[] chars = str.toCharArray(); // 于上处第一点分析,256长度足以。 int[] charArray = new int[256]; // 1、计算出现字符次数 for(char c : chars){ charArray[(int)c]++; } // 2、按照字符出现顺序查找出现次数,返回第一个为1的字符。 for(char c : chars){ if(charArray[(int)c] == 1){ return String.valueOf(c); } } return null; }
github:https://github.com/liujinjin777/liujinjintest.git
相关文章推荐
- 【SAP BI】BW如何连接SQLSERVER数据库
- Mysql主从复制
- Linux环境下安装Nodejs
- Java_静态方法中调用非静态方法
- IOS 实现类似安卓的Toast
- crontab失败一例
- 2017《面向对象程序设计》寒假作业二(二)
- Android之AppWidget 开发浅析
- IOS 动画
- JAVASE基础-day02(Java语言基础)
- mapreduce多路输出实例
- 2017年要学习的三个CSS新特性
- jQuery提示插件 qTip简单使用
- 导出大量数据到Excel的一种方式
- 查询或修改文件的创建、访问、修改等时间戳信息
- CABasicAnimation-旋转
- 无法在只读列“id”中插入数据
- OpenCV3+VS2015 配置问题(x64)
- mysql 5.6 disable GTID replication
- Mybatis的<where><foreach><set>等标签详解