《剑指offer》-找到字符串中第一个只出现一次的字符,并返回它的位置
2018-01-25 16:11
591 查看
/* *在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置 */ import java.util.*; public class FirstNotRepeatingChar { //暴力搜索法:O(n^2) public int firstNotRepeatingChar(String str) { if(str.length() == 0) return -1; List<String> list = new ArrayList<String>(); int index = 0; boolean flag = true; for(int i = 0;i < str.length() - 1;i ++) { char c = str.charAt(i); //保证每一次内部循环的不会是以前执行过的字符 if(!list.contains(c + "")) { list.add(c + ""); //System.out.println("遍历的字符:" + c); flag = true; //每一次循环之前要将flag复位 for(int j = i + 1;j < str.length();j ++) { if(str.charAt(j) == c) { flag = false; //发现有重复,没找到,跳出循环 //System.out.println("发现有重复,跳出循环"); break; } } } //没有重复,找到了,跳出循环 if(flag == true) { index = i; //System.out.println("找到了跳出循环"); break; } } return index; } //构造一个HashMap(键存字符,值存次数),首先统计出每个字符的出现次数;之后找出出现次数为1的第一个字符,时间复杂度为O(n) public int firstNotRepeatingChar2(String str) { if(str.length() == 0) return -1; HashMap<Character, Integer> map = new HashMap<Character, Integer>(); for(int i = 0;i < str.length();i ++) { char c = str.charAt(i); if(map.containsKey(c)) { int times = map.get(c); map.put(c, ++ times); //map里的key不能重复,因此会覆盖掉原来key里的value } else { map.put(c, 1); } } //System.out.println(map); for(int i = 0;i < str.length();i ++) { char c = str.charAt(i); if(map.get(c) == 1) { return i; } } return -1; } public static void main(String[] args) { String str = "hhello"; System.out.println(new FirstNotRepeatingChar().firstNotRepeatingChar2(str)); } }
相关文章推荐
- 【剑指Offer-时间效率平衡】在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 26.在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 26.在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 剑指offer——寻找字符串中只出现一次的第一个字符位置
- 15. Google面试题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- 剑指offer(三十八)之第一个只出现一次的字符位置
- 第17题:返回字符串中第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- 在一个字符串中找到第一个只出现一次的字符
- 每天学习一点编程(5)(在一个字符串中找到第一个只出现一次的字符)
- 剑指offer题解 第一个只出现一次的字符位置
- 找到字符串中第一个出现一次的字符
- 微软面试100题之17题:在一个字符串中找到第一个只出现一次的字符