第17题:返回字符串中第一个只出现一次的字符
来源:互联网 发布:实时汇率软件 编辑:程序博客网 时间:2024/06/12 23:30
欢迎转载,转载请务必注明出处:http://blog.csdn.net/alading2009/article/details/45193239
第17题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
这题解法确实很巧妙,看了答案,发现有一点小问题。文档整理的答案中,在记录了字符串中各字符出现的次数以后,接着是按ASCII码值从小到大来搜索大小为256的数组,这样返回的是出现次数为1且ASCII码值最小的字符。假如有一串字符:“akab”,按文档所给算法,那么返回的是将是b,而不是第一个出现的k,因为b的ASCII码值比k小,在数组中将先于k被搜索到。
代码
package test017;/** * Created by cq on 2015/4/21. * 定义一个新类型 */public class SpecifiedInteger { //字符出现的次数 private int freq; //字符在字符串中最后出现的位置 private int index; public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public int getFreq() { return freq; } public void setFreq(int freq) { this.freq = freq; }}
package test017;/** * Created by cq on 2015/4/21. * 第17题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 */public class Test017 { public static void getFirstAppearOnceChar(String s){ if (s == null){ return; } //假设字符编码为ASCII,则总共只有256个 SpecifiedInteger[] temp = new SpecifiedInteger[256]; for (int i = 0; i < 256; i++){ temp[i] = new SpecifiedInteger(); } char[] charArray = s.trim().toCharArray(); int index = 0; //记录字符串中每个字符出现的次数 for (char c:charArray){ temp[c].setFreq(temp[c].getFreq()+1); temp[c].setIndex(index++); } //firstSingleChar赋初值为字符串的第一个字符,若第一个字符不只出现一次,则将其位置信息标为MAX_VALUE int firstSingleChar = charArray[0]; if (temp[firstSingleChar].getFreq() != 1){ temp[firstSingleChar].setIndex(Integer.MAX_VALUE); } //遍历256个位置,搜索第一个只出现一次的字符 for (int i = 0; i < 256; i++){ if (temp[i].getFreq() == 1 && temp[i].getIndex() < temp[firstSingleChar].getIndex()){ firstSingleChar = i; } } System.out.println((char)firstSingleChar); } public static void main(String[] args){ getFirstAppearOnceChar("adkffagddk"); getFirstAppearOnceChar("abaccdeff"); }}
执行结果
Connected to the target VM, address: '127.0.0.1:2755', transport: 'socket'gbDisconnected from the target VM, address: '127.0.0.1:2755', transport: 'socket'Process finished with exit code 0
所有代码均已上传到GitHub,传送门
0 0
- 第17题:返回字符串中第一个只出现一次的字符
- 第5题 在一个字符串中找到第一个只出现一次的字符
- July 微软面试100题 第17题 字符串中第一个只出现一次的字符
- 返回字符串中第一个只出现过一次的字符(hash)
- 找出字符串中只出现一次的第一个字符
- 查找字符串中第一个只出现一次的字符
- 找出字符串中第一个只出现一次的字符
- 查找字符串中第一个只出现一次的字符
- 字符串中第一个只出现一次的字符
- 字符串中第一个只出现一次的字符
- 查找字符串中第一个只出现一次的字符
- 查找字符串中第一个只出现一次的字符
- 字符串中第一个只出现一次的字符
- 寻找字符串中只出现一次的第一个字符
- 字符串中第一个只出现一次的字符
- 查找字符串中第一个只出现一次的字符
- 找出字符串中第一个只出现一次的字符
- 字符串中第一个只出现一次的字符
- WARN Please initialize the log4j system properly.
- 从远处svn下载下来的项目报缺少servlet.jar
- Java调用Jena写SPARQL查询
- SQL注入
- 自定义view
- 第17题:返回字符串中第一个只出现一次的字符
- Linux下epoll网络编程模型
- 8天入门wpf—— 第八天 最后的补充
- ZOJ:3802 Easy 2048 Again (状态压缩)
- 关于Android连接蓝牙的方法
- IOS中ViewController(控制器)的生命周期
- sss2整合时注入后取得值为空的bug(其中一个原因)
- json数据解析
- Hadoop大数据平台运维工程师须掌握的基本命令集分享