剑指offer:(35)时间效率和空间效率的平衡 :第一个只出现一次的字符

xiaoxiao2021-02-28  56

在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置。

package co.com.jianzhioffer; import java.util.HashMap; import java.util.Map; public class Solution35 { //方法一,创建一个hashMap来记录字符值及其对应的次数, //然后遍历字符串,如果出现某个字符的次数为1,则输出其索引位置 public static int FirstNotRepeatingChar(String str){ if(str==null||str.length()<=0) return -1; Map<Character,Integer> map = new HashMap<Character,Integer>(); for(int i = 0;i<str.length();i++){ char c = str.charAt(i); if(map.containsKey(c)){ map.put(c, map.get(c)+1); }else{ map.put(c, 1); } } int i = 0; for(;i<str.length();i++){ char c = str.charAt(i); if(map.get(c)==1){ return i; } } return -1; } //方式二:将字符串转成一个字符数组,再另外创建一个大小为‘z’的数组,实现一种索引位置为字符所对应的ASCII值,存的是字符的次数 //然后遍历字符数组,如果出现某个字符的次数为1,则输出其索引位置 public static int FirstNotRepeatingChar(String str){ char[] charArray = str.toCharArray(); int[] a = new int['z']; for(char ch:charArray){ a[(int) ch]++; } for(int i =0;i<charArray.length;i++){ if(a[(int) charArray[i]] ==1){ return i; } } return -1; } public static void main(String[] args) { System.out.println(FirstNotRepeatingChar("")); } }

转载请注明原文地址: https://www.6miu.com/read-73027.html

最新回复(0)