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实现)相关推荐

  1. 《剑指offer》第五十题(字符串中第一个只出现一次的字符)

    // 面试题50(一):字符串中第一个只出现一次的字符 // 题目:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出 // 'b'. #include & ...

  2. 刷题笔记之十 (小易的升级之路+找出字符串中第一个只出现一次的字符+洗牌+MP3光标位置)

    目录 1.存取任意指定序号的元素和在最后进行插入和删除运算,利用顺序表存储最节省时间 2. 数据结构中具有记忆功能的是栈 3. 递归程序的优化一般为 尾递归优化 4.二叉树遍历,前中后序遍历用到的是栈 ...

  3. 笔试强训第三周编程题part01(年终奖,迷宫问题;微信红包,计算字符串的距离;小易的升级之路,找出字符串中第一个只出现一次的字符,洗牌)

    年终奖 OJ链接 此题是一道动态规划的问题 读题可知:只能从上往下和从左往右移动 由此需要前[i-1] [ j ]和[i][j-1]来比较大小来确实最优解. 其中有两种特殊情况,第一行和第一列 代码如 ...

  4. 找字符串中第一个只出现一次的字符

    题目:在一个字符串中找到第一个只出现一次的字符. 举例:输入abaccdeff,则输出b. 答:假设字符占一个字节,则共有256不同的字符,开辟256空间,用查找表. #include "s ...

  5. 查找字符串中第一个只出现一次的字符

    Java Map接口提供了将Key映射到值的对象,HashMap  TreeMap 方法 功能 put(K key ,V value) 向集合中添加指定key ,value的映射关系 contains ...

  6. 【Java】 剑指offer(50-2) 字符流中第一个只出现一次的字符

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字 ...

  7. 寻找字符串中第一个仅仅出现一次打字符

    寻找字符串中第一个仅仅出现一次打字符 代码例如以下: #include <iostream> #include <string>using namespace std;char ...

  8. 找出google字符流中第一个只出现一次的字符(map/queue)

    目录 解法一.hashmap 1.map的定义及插入,> 2.map的value获取及遍历 3.查找find(key) 4.计数count(key) 解法二.队列 1.队列 2.char以及op ...

  9. 找第一个只出现一次的字符_剑指offer 字符流中第一个只出现一次的字符

    题目描述: 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是'g'.当从该字符流中读出前六个字" ...

最新文章

  1. win系统注册缺少的库 32位系统 64位系统
  2. word取消下一页_word文档页码设置及文中小箭头清除办法
  3. json 解析_json爬坑1:yajl解析json
  4. Stack Usage on Transfers to Interrupt and Exception Handling Routines
  5. pandownload软件下载
  6. 30秒的PHP代码片段(1)数组 - Array
  7. TYUT程序设计比赛2017回顾
  8. Apache的网页优化!!给你的网页套上一层层保护罩(网页压缩、网页缓存、隐藏版本信息、设置防盗链)
  9. outlook服务器邮件满了怎么办,Outlook邮箱不能接收邮件提示邮件箱已满怎么办?
  10. Retrofit详解
  11. Python操作网页
  12. dva介绍--Dva概念(二)
  13. 2012年信息系统项目管理师下半年上午考试习题与答案解析
  14. 39-网上商城数据库-用户信息数据操作
  15. python 基础文件操作
  16. 第九周 任务一
  17. 产品经理不再纸上谈兵——雾里看花的用户画像
  18. PAT 大区赛 1-7古风排版
  19. 鸿蒙车载智慧屏评测,首款鸿蒙OS新机 荣耀智慧屏全面评测:这就是电视的未来...
  20. 关于海底光缆不为人知的“秘密”

热门文章

  1. 出块过程 (1)close发送消息
  2. Hyperledger Fabric 区块数据结构(1)Block
  3. 智能合约重构社会契约 (3)智能合约的自动触发
  4. 《研磨设计模式》chap18 状态模式state(2)模式介绍
  5. java元婴期(19)----java进阶(spring(3)----AOP相关概念实现方式)
  6. 创新实训个人记录:P versus NP
  7. 计算机专业相关分类调研
  8. SAGE(SAGEMATH)密码学基本使用方法
  9. python编写一个压测重启的测试程序
  10. bl 和 ldr跳转程序的区别