找出字符串中第一个只出现过一次的字符和位置
2013-07-31 20:22
288 查看
题目:找出字符串中第一个只出现过一次的字符和位置
比如:abcebad 只出现过一次的第一个字符应该是c,第3个。
@左耳朵耗子 大哥说的算法如下:
第一次想到的就是需要记录位置和字符,其实当时的想法和这个还是有出入的。最后@左耳朵耗子 大哥把我拉回这种算法,并仔细讲解了下。
当时我第二个想法是记录每个字符出现的次数,思绪当时也有点堵,@左耳朵耗子 大哥对我这次提出的算法理解和我是有点偏差的,其实不是n^2的算法,而是2n的复杂度,
回来后理清了下思路,大致代码如下:(这种算法不知道是否完全正确)
当时其实还有个问题是字符真的只有256吗?针对这种情况,现在想应该可以先扫描出最大的ascii值,然后在new 一个这么大的一个标记数组。
一紧张,思路总是有点堵,而且自己的理解能力其实也有待提高。还是自己不够强,所以自信不够啊。
----------------------------------------------------------------分割线--------------------------------------------------------------
一直很敬佩@左耳朵耗子 大哥,经常关注他的微博和博客,今天很高兴能见到他本人并聊了那么多。@左耳朵耗子 大哥一些话其实还是比较打击到我的,不过回想下确实这两年下来自己懒惰了很多,荒废了很多时间。@左耳朵耗子 大哥对我的一些建议很好,很感谢这次机会,很感谢@左耳朵耗子 大哥。希望今后自己能发愤图强吧,不经要看还要多写多理解。ps:猜想今天给@左耳朵耗子 大哥留下的影响并不是很好。
比如:abcebad 只出现过一次的第一个字符应该是c,第3个。
@左耳朵耗子 大哥说的算法如下:
int[] pos = new int[256]; Arrays.fill(pos, -1); for (int i = 0, len = s.length(); i < len; ++i) { char c = s.charAt(i); if (pos[c] == -1) { pos[c] = i; } else {// 不等于-1,说明出现过一次了 pos[c] = -1; } } char oneChar = ' '; int oneCharPos = Integer.MAX_VALUE; for (int i = 0; i < 256; ++i) { if (pos[i] > -1 && pos[i] < oneCharPos) { oneChar = (char) i;// s.charAt(pos[i]); oneCharPos = pos[i]; } } System.out.println(oneChar + ":" + (oneCharPos + 1));
第一次想到的就是需要记录位置和字符,其实当时的想法和这个还是有出入的。最后@左耳朵耗子 大哥把我拉回这种算法,并仔细讲解了下。
当时我第二个想法是记录每个字符出现的次数,思绪当时也有点堵,@左耳朵耗子 大哥对我这次提出的算法理解和我是有点偏差的,其实不是n^2的算法,而是2n的复杂度,
回来后理清了下思路,大致代码如下:(这种算法不知道是否完全正确)
int len = s.length(); int[] ascii = new int[256]; for (int i = 0; i < len; ++i) { char c = s.charAt(i); ascii[c]++; } char oneChar = ' '; int oneCharPos = -1; for (int i = 0; i < len; ++i) { char c = s.charAt(i); if (ascii[c] == 1) { oneChar = s.charAt(i); oneCharPos = i; break; } } System.out.println(oneChar + ":" + (oneCharPos + 1));
当时其实还有个问题是字符真的只有256吗?针对这种情况,现在想应该可以先扫描出最大的ascii值,然后在new 一个这么大的一个标记数组。
一紧张,思路总是有点堵,而且自己的理解能力其实也有待提高。还是自己不够强,所以自信不够啊。
----------------------------------------------------------------分割线--------------------------------------------------------------
一直很敬佩@左耳朵耗子 大哥,经常关注他的微博和博客,今天很高兴能见到他本人并聊了那么多。@左耳朵耗子 大哥一些话其实还是比较打击到我的,不过回想下确实这两年下来自己懒惰了很多,荒废了很多时间。@左耳朵耗子 大哥对我的一些建议很好,很感谢这次机会,很感谢@左耳朵耗子 大哥。希望今后自己能发愤图强吧,不经要看还要多写多理解。ps:猜想今天给@左耳朵耗子 大哥留下的影响并不是很好。
相关文章推荐
- 找出字符串中第一个只出现一次的字符
- 【100题】找出一个字符串中第一个只出现一次的字符
- c++面试题之 找出字符串中第一个只出现一次的字符
- 【华为oj】找出字符串中第一个只出现一次的字符
- 找出字符串中第一个只出现一次的字符
- 在字符串中找出第一个只出现一次的字符
- LeetCode:找出字符串中第一个只出现一次的字符
- 剑指offer——寻找字符串中只出现一次的第一个字符位置
- 如何找出一个字符串中第一个只出现一次的字符
- 只允许遍历一遍字符串,找出字符串中第一个只出现一次的字符
- 【剑指Offer-时间效率平衡】在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 字符串----找出字符串中第一个只出现一次字符
- C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b'
- 【笔试题】C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出&#39;b&#39;。
- 找出字符串中第一个只出现一次的字符
- 【华为OJ】找出字符串中第一个只出现一次的字符
- 找出字符串中第一个只出现一次的字符
- 用最少的代码找出一个字符串中第一个不重复出现(即只出现一次)的字符
- 只允许遍历一遍字符串,找出字符串中第一个只出现一次的字符
- [剑指Offer-字符串]请实现一个函数用来找出字符流中第一个只出现一次的字符。