LeetCode-387. First Unique Character in a String (Java)

来源:互联网 发布:童装淘宝店铺名字大全 编辑:程序博客网 时间:2024/06/18 08:21

Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.

Examples:

s = "leetcode"return 0.s = "loveleetcode",return 2.

Note: You may assume the string contain only lowercase letters.

---------------------------------------------------------------------------------------------------------------------

题意

找到字符串中第一个不重复出现的字母,返回其在字符串中的位置。

思路

这个我首先想到的是先把它转化为char数组,然后引入一个新的数组A,将原数组的值作为新数组A的索引,

将出现的次数作为新数组A的值。然后循环新数组A,得到出现次数为1的字符,然后得到其最小位置。

代码

public class Solution {    public int firstUniqChar(String s) {        if(s == "" || s == null || s == " ") return -1;else{char[] array = s.toCharArray();        int [] newArray = new int[27];        Map<Integer,Integer> map = new HashMap();        for(int i=0;i< array.length;i++){        int ddd = array[i] -'a'+1;        newArray[ddd]++;        map.put(ddd,i);        }        int minIndex = Integer.MAX_VALUE;        for(int i=0;i<newArray.length;i++){        if(newArray[i] ==1){        int index = map.get(i);        if(index<minIndex){        minIndex = index;        }        }        }         if(minIndex == Integer.MAX_VALUE){        minIndex = -1;        }         return minIndex;}    }}
其实我的方法是有点蠢了,还有一种方法,利用s.lastIndexOf(i)进行判断是否重复,然后比较索引大小,相比省去了很多步骤。

方法二:

public class Solution {    public int firstUniqChar(String s) {        int retIndex = Integer.MAX_VALUE;        int pos;        for(int i = 97; i < 123; i++){            pos = s.indexOf(i);            if(pos != -1 && pos == s.lastIndexOf(i)){                retIndex = pos < retIndex ? pos : retIndex;            }        }        if(retIndex != Integer.MAX_VALUE)            return retIndex;        return -1;        }}