1. 程式人生 > >LeetCode刷題——字串中的第一個唯一字元

LeetCode刷題——字串中的第一個唯一字元

大家好,結束了五一假期,繼續刷題日記。本次題目要求如下:


我的思路是這樣的:

首先計算出s的長度並將s複製給一個字串cont,進入while迴圈,知道字串s為空,使用.find()函式尋找字串裡是否有與s[0]相同的字元若有,使用remove函式把所有與s[0]相同的字元包括s[0]移到字串尾部,並用erase刪除掉這些字元。若沒有,則使用.find尋找這個字元在cont中對應的下標i並返回i。迴圈結束返回-1.

程式碼如下:

class Solution {
public:
    int firstUniqChar(string s) {
        int len = s.size();
string cont = s;
int num;
int i = 0;


while(s.size() > 0){
num = s.find(s[0], 1);
if (num < 0){
i = cont.find(s[0]);
return i;
}
else{
const char p = s[0];
s.erase(remove(s.begin(), s.end(), p), s.end());
}
}
return -1;
    }
};

但是有一個問題,這樣執行下去效率不是很高,在網上看到一個更簡單的方法:

首先統計字串中26個字母的個數,然後在個數為1的字母中找下標最小的返回其下標,如果沒有個數為1的,返回-1。程式碼如下:

class Solution {
public:
    int firstUniqChar(string s) {
        int n=s.size();
        if(n==0)
            return -1;
        int a[26]={0};
        for(int i=0;i<n;i++){
            a[s[i]-'a']++;
        }
        for(int i=0;i<n;i++)
        {
            if(a[s[i]-'a']==1)
                return i;
        }
        return -1;
    }
};

通過這道題學習到的地方有:

1.

C++要從字串中刪除所有某個特定字元, 可用如下程式碼:

str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());

他是將str中所有的a移到字串的末尾並返回一個新的end,這個end就是不包含a的新字串的末尾的下一位,我們再用erase將這個新的end到字串原始end之間的字元刪掉,就是刪掉了字串中所有的a。

2.很多時候,在可以假設有限變數時用陣列會更加方便。

好了,我們下期見!

相關推薦

LeetCode 簡單】85-字串第一唯一字元

宣告: 今天是第85道題。給定n,從 1 到 n 選擇一個數字。 你需要猜我選擇了哪個數字。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除 (手動比心ღ( ´・ᴗ・`

LeetCode——字串第一唯一字元

大家好,結束了五一假期,繼續刷題日記。本次題目要求如下:我的思路是這樣的:首先計算出s的長度並將s複製給一個字串cont,進入while迴圈,知道字串s為空,使用.find()函式尋找字串裡是否有與s[0]相同的字元若有,使用remove函式把所有與s[0]相同的字元包括s[

LeetCode——第387字串第一唯一字元

題目: 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = “leetcode” 返回 0. s = “loveleetcode”, 返

C#LeetCode之#278-第一錯誤的版本(First Bad Version)

問題 你是產品經理,目前正在帶領一個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。 假設你有 n 個版本 [1, 2, ..., n],你想找出導致之後所有版本出錯的第一個錯誤的版本。 你可

LeetCode之387Python字串第一唯一字元

題目: 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2. 注意事項:您可以假定該字串只包含小寫字母。 我的解答: 先計數,

LeetCode記錄——第387字串第一唯一字元

題目描述 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = “leetcode” 返回 0. s = “loveleetcode”, 返回 2. 思路分析 關鍵問題在於,如何找到第一個不重複字元

每日一--LeetCode 387 (字串第一唯一字元)java

題目描述: 程式碼如下: class Solution { public int firstUniqChar(String s) { String tmp=s; char []data=tmp.toCharArray(); if(

LeetCode字串第一唯一字元

字串中的第一個唯一字元 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2. 注意事項:您可以假定該字串只包含小寫字母。

Leetcode演算法(C語言)15--字串第一唯一字元

題目:字串中的第一個唯一字元 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = “leetcode” 返回 0. s = “loveleetco

swift 字串第一唯一字元 - LeetCode

給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2.   注意事項:您可以假定該字串只包含小寫字母。 class Solut

LeetCode題目--字串第一唯一字元(python實現)

題目 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2. 注意事項:您可以假定該字串只包含小寫字母。   p

LeetCode】387. 字串第一唯一字元

題目連結:https://leetcode-cn.com/problems/first-unique-character-in-a-string/description/ 題目描述 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 示例

C++ Leetcode初級演算法之字串第一唯一字元

給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = “leetcode” 返回 0. s = “loveleetcode”, 返回 2. 注意事項:您可以假定該字串只包含小寫字母。 class Solution { pub

leetcode-字串第一唯一字元

給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2. 注意事項:您可以假定該字串只包含小寫字母。 程式碼 /** * @para

Leetcode——字串第一唯一字元——python3

# 字串中的第一個唯一字元 class Solution(object): def first_uniq_char(self, s): # 方法一: # a = list(s) # b = [] #

leetcode字串第一唯一字元(C、Python解答)

題目: 字串中的第一個唯一字元 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "lovelee

LeetCode解題 387. 字串第一唯一字元

文章已同步更新到本人個人部落格跳轉連結 題目描述: 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2. 注意事項:您可以假定該字串只包含

[Leetcode] 387. 字串第一唯一字元 java hashmap與ASCII碼

給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2. 注意事項:您可以假定該字串只包含小寫字母。 第一種方法(hashmap略慢)

Leetcode題解之字串(3)字串第一唯一字元

題目描述: 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2. 注意事項:您可以假定該字串只包含小寫字母。 思路:第一種

leetcode-387. 字串第一唯一字元

一、問題描述給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。案例:s = "leetcode" 返回 0. s = "loveleetcode", 返回 2.方法一:1.程式碼和思路因為字串是不可變的,這裡我們只能建立一個list來記錄列