题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)
题解一:HashMap
1 public static int FirstNotRepeatingChar(String str) { 2 Map<Character, Integer> map = new HashMap<>(); 3 if(str==null){ 4 return 0; 5 } 6 char[] chars = str.toCharArray(); 7 int len=chars.length; 8 for(int i=0;i<len;i++){ 9 if(map.containsKey(str.charAt(i))){ 10 int time = map.get(str.charAt(i)); 11 map.put(str.charAt(i), ++time); 12 }else { 13 map.put(str.charAt(i), 1); 14 } 15 } 16 int index = -1; 17 for( int i=0;i<str.length();i++){ 18 char c = str.charAt(i); 19 if (map.get(c) == 1) { 20 return i; 21 } 22 } 23 return index; 24 }
题解二:数组
1 public static int FirstNotRepeatingChar01(String str){ 2 char[] chars = str.toCharArray(); 3 int[] map = new int[256]; 4 for (int i = 0; i < chars.length; i++) { 5 map[chars[i]]++; 6 } 7 //遍历一遍字符串,找出第一个数组内容为1的字母 8 for (int i = 0; i < chars.length; i++) { 9 if (map[chars[i]] == 1){ 10 return i; 11 } 12 } 13 return -1; 14 }
测试:
1 public static void main(String[] args) { 2 String str="google"; 3 int index = FirstNotRepeatingChar01(str); 4 System.out.println(index); 5 } 6 输出:4
原文地址:https://www.cnblogs.com/Blog-cpc/p/12459852.html
时间: 2024-11-09 06:09:29