Leetcode-387-字符串中的第一個唯一字符

給定一個字符串,找到它的第一個不重復的字符,并返回它的索引。如果不存在,則返回 -1。

案例:

s = "leetcode"
返回 0.

s = "loveleetcode",
返回 2.

注意事項:您可以假定該字符串只包含小寫字母。


分析:

題意很簡單,給定字符串從左向右,直到遇到一個是唯一的字符串,返回此索引值就可以。

解題的思路可以循環遍歷做元素是否相同的比較,但這樣太費時費力了。
而根據題目,對于每一個元素只關心是否有重復元素,并不關心有幾個重復元素,所以最簡單的方法就是利用接口 indexOf() 和 lastIndexOf()兩個接口比對結果是否一致。

解法一:

List中有indexOf()和lastIndexOf()接口,我們把String字符串里面的每一個字符都放入List中,調用其相應接口進行判斷。
Java解答如下:

    public int firstUniqChar(String s) {
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char ch = chars[i];
            int index = s.indexOf(ch);
            if (index == s.lastIndexOf(ch)) {
                return index;
            }
        }
        return -1;
    }

解法二:

其實轉換一下腦子的話,還有更簡單的方法,因為把String字符串放入ArrayList中需要耗費不少時間和空間,那么就要想辦法避免這些消耗。別忘了題目還給了一個限制條件,字符串都是小寫的,那么我們就可以確定字符串中每一個字符的范圍是從 az 的,我們可以遍歷字符 az,然后判斷每一個字符在字符串里面是否存在,如果存在判斷其indexOf()和lastIndexOf()的值是否相同,最后在找出index值最小的結果,就是題目所求結果。
Java解答如下:

    public int firstUniqChar(String s) {
        int result = -1;
        for (char ch = 'a'; ch <= 'z'; ch++) {
            int index = s.indexOf(ch);
            if (index != -1 && index == s.lastIndexOf(ch)) {
                result = (result == -1) ? index : Math.min(result, index);
            }
        }
        return result;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容