算法--06谷歌面试:字符串中第一个只出现一次的字符(Java实现)
Q题目
这道题是2006 年 google 的一道笔试题,如下:
在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。
A解法
这道题,说难也不难,关键是思路。
有些人思考该题时很容易陷入死胡同,想先获取字符串str中所有字符出现的次数,在去根据出现的次数去取值。
抑或
先判断第一个字符出现的次数,判断是否符合条件,不符合,在判断第二个,以此类推。
最优解 - - 逻辑
方式一:存在法
我们可以利用字符串的特点进行判断,因为str有contains()方法,所以我们可以将当前获取的字符从字符串中去除掉,再调用contains()判断该字符是否依然还有。
备注:字符串没有直接剔除特定字符串的方法,所以只能用截取,有点麻烦
方式二:下标法
我们利用字符串的indexOf() 和 lastIndexOf()方法。
获取字符letter在字符串string中从前往后第一次出现的下标--indexOf
获取字符letter在字符串string中从后往前第一次出现的下标-- lastIndexOf
若两个下标相同,说明该字符只出现了一次
代码实现
其他思路虽然可以做出来,但过于复杂,这里就不做演示了。只用最简单的方法了。代码如下:
使用方式二:下标法
package 谷歌第一个出现一次的字母;/*** 题目:在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。* 分析:这道题是2006 年 google 的一道笔试题。* @author Administrator**/
public class Test1 {public static void main(String[] args) {//测试String test="abaccdebff";String result=getFirstStr(test);System.out.println(result);}public static String getFirstStr(String str){for(int i=0;i<str.length();i++){char letter=str.charAt(i);//方式一:从str中移除当前字母letter--剩余的字符串str,调用contains()方法,判断是否还存在letter//方式二:判断letter在str中从前往后和从后往前找,该字母的下标,若相同说明只有一个letter--indexOf() 和lastIndexOf()int start=str.indexOf(letter);int end=str.lastIndexOf(letter);if(start==end){//说明该字符只出现一次return String.valueOf(letter);//不能直接返回char类型--因为当letter不存在时返回值不好处理}}return "不存在";}
}
算法--06谷歌面试:字符串中第一个只出现一次的字符(Java实现)相关推荐
- 《剑指offer》第五十题(字符串中第一个只出现一次的字符)
// 面试题50(一):字符串中第一个只出现一次的字符 // 题目:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出 // 'b'. #include & ...
- 刷题笔记之十 (小易的升级之路+找出字符串中第一个只出现一次的字符+洗牌+MP3光标位置)
目录 1.存取任意指定序号的元素和在最后进行插入和删除运算,利用顺序表存储最节省时间 2. 数据结构中具有记忆功能的是栈 3. 递归程序的优化一般为 尾递归优化 4.二叉树遍历,前中后序遍历用到的是栈 ...
- 笔试强训第三周编程题part01(年终奖,迷宫问题;微信红包,计算字符串的距离;小易的升级之路,找出字符串中第一个只出现一次的字符,洗牌)
年终奖 OJ链接 此题是一道动态规划的问题 读题可知:只能从上往下和从左往右移动 由此需要前[i-1] [ j ]和[i][j-1]来比较大小来确实最优解. 其中有两种特殊情况,第一行和第一列 代码如 ...
- 找字符串中第一个只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符. 举例:输入abaccdeff,则输出b. 答:假设字符占一个字节,则共有256不同的字符,开辟256空间,用查找表. #include "s ...
- 查找字符串中第一个只出现一次的字符
Java Map接口提供了将Key映射到值的对象,HashMap TreeMap 方法 功能 put(K key ,V value) 向集合中添加指定key ,value的映射关系 contains ...
- 【Java】 剑指offer(50-2) 字符流中第一个只出现一次的字符
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字 ...
- 寻找字符串中第一个仅仅出现一次打字符
寻找字符串中第一个仅仅出现一次打字符 代码例如以下: #include <iostream> #include <string>using namespace std;char ...
- 找出google字符流中第一个只出现一次的字符(map/queue)
目录 解法一.hashmap 1.map的定义及插入,> 2.map的value获取及遍历 3.查找find(key) 4.计数count(key) 解法二.队列 1.队列 2.char以及op ...
- 找第一个只出现一次的字符_剑指offer 字符流中第一个只出现一次的字符
题目描述: 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是'g'.当从该字符流中读出前六个字" ...
最新文章
- win系统注册缺少的库 32位系统 64位系统
- word取消下一页_word文档页码设置及文中小箭头清除办法
- json 解析_json爬坑1:yajl解析json
- Stack Usage on Transfers to Interrupt and Exception Handling Routines
- pandownload软件下载
- 30秒的PHP代码片段(1)数组 - Array
- TYUT程序设计比赛2017回顾
- Apache的网页优化!!给你的网页套上一层层保护罩(网页压缩、网页缓存、隐藏版本信息、设置防盗链)
- outlook服务器邮件满了怎么办,Outlook邮箱不能接收邮件提示邮件箱已满怎么办?
- Retrofit详解
- Python操作网页
- dva介绍--Dva概念(二)
- 2012年信息系统项目管理师下半年上午考试习题与答案解析
- 39-网上商城数据库-用户信息数据操作
- python 基础文件操作
- 第九周 任务一
- 产品经理不再纸上谈兵——雾里看花的用户画像
- PAT 大区赛 1-7古风排版
- 鸿蒙车载智慧屏评测,首款鸿蒙OS新机 荣耀智慧屏全面评测:这就是电视的未来...
- 关于海底光缆不为人知的“秘密”