剑指offer_第一个只出现一次的字符
2016-10-05 09:48
281 查看
题目描述
在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置。
时间复杂度O(n):遍历一次字符串,将字符与其出现的次数记录在HashMap中;再遍历一次字符串,第一次检测到其在HashMap中记录的次数为1时,输出当前位置。
代码:
这种题目的变形:
剑指offer_数组中出现次数超过一半的数字
都是利用HashMap记录出现的字符及其次数。
再次变形:
实现一函数,给定两个字符串str1和str2,将字符串str2中在str1出现的字符删除掉。例如,str1=“We are strudent”,str2=“eas”,最终返回“W r tudnt”。
做法:遍历str2并将其字符放入哈希数组中,再遍历str1,去掉哈希数组中存在的字符即可。与上题思路一致。时间复杂度为O(n+m),n和m分别为str1和str2的长度。空间为O(1)。
再变再变:
实现一函数,将字符串中出现重复字符全部去掉。例如,str=“google”,那么返回为“gole”。
做法:类似,可用一个布尔数组去记录。第一次出现标志位true,当第二次访问该字符时,当前标志位为true时,删除当前字符。时间复杂度为O(n),n为str的长度。空间为O(1)。
思路都是一样一样的
在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置。
时间复杂度O(n):遍历一次字符串,将字符与其出现的次数记录在HashMap中;再遍历一次字符串,第一次检测到其在HashMap中记录的次数为1时,输出当前位置。
代码:
import java.util.*; public class Solution { public int FirstNotRepeatingChar(String str) { if(str==null||str.length()==0){ return -1; } char[] chars = str.toCharArray(); HashMap<Character,Integer> map = new HashMap<Character,Integer>(); for(int i=0;i<str.length();i++){ if(map.get(chars[i])!=null){ map.put(chars[i],map.get(chars[i])+1); }else{ map.put(chars[i],1); } } for(int i=0;i<str.length();i++){ if(map.get(chars[i])==1){ return i; } } return -1; } }
这种题目的变形:
剑指offer_数组中出现次数超过一半的数字
都是利用HashMap记录出现的字符及其次数。
再次变形:
实现一函数,给定两个字符串str1和str2,将字符串str2中在str1出现的字符删除掉。例如,str1=“We are strudent”,str2=“eas”,最终返回“W r tudnt”。
做法:遍历str2并将其字符放入哈希数组中,再遍历str1,去掉哈希数组中存在的字符即可。与上题思路一致。时间复杂度为O(n+m),n和m分别为str1和str2的长度。空间为O(1)。
再变再变:
实现一函数,将字符串中出现重复字符全部去掉。例如,str=“google”,那么返回为“gole”。
做法:类似,可用一个布尔数组去记录。第一次出现标志位true,当第二次访问该字符时,当前标志位为true时,删除当前字符。时间复杂度为O(n),n为str的长度。空间为O(1)。
思路都是一样一样的
相关文章推荐
- 剑指offer系列源码-第一个只出现一次的字符
- 【剑指offer系列】 第一个只出现一次的字符___35
- 剑指offer:第一个只出现一次的字符位置
- 剑指offer面试题目:第一个只出现一次的字符
- JAVA实现 剑指offer—求字符串中第一个只出现一次的字符
- 剑指offer面试题[35]-第一个只出现一次的字符
- 剑指offer--面试题35:第一个只出现一次的字符
- 剑指Offer:第一个只出现一次的字符
- [剑指offer学习心得]之:第一个只出现一次的字符
- 剑指offer(35)第一个只出现一次的字符
- 剑指offer:第一个只出现一次的字符
- 剑指offer(36):第一个只出现一次的字符
- 《剑指offer》-找到字符串中第一个只出现一次的字符,并返回它的位置
- python剑指offer系列第一个只出现一次的字符
- 剑指Offer------第一个只出现一次的字符
- 剑指offer系列之33:第一个只出现一次的字符
- 剑指Offer(java版):第一个只出现一次的字符
- 剑指offer—第一个只出现一次的字符位置
- 剑指offer(19)-第一个只出现一次的字符
- 第一个只出现一次的字符 (剑指offer)