劍指offer:(35)時間效率和空間效率的平衡 :第一個只出現一次的字元
阿新 • • 發佈:2018-11-09
在一個字串(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("")); } }