32 在字串中找出第乙個只出現一次的字元。

2021-09-27 00:12:10 字數 1558 閱讀 5484

一、題目

在字串中找出第乙個只出現一次的字元。

二、解題思路

第一思路:借助於陣列來做。

開闢乙個長度為26的陣列,用來存放字串中每個字元出現的次數。這樣第一次掃瞄去統計這個字串中字元出現的次數,第二次去統計第乙個出現結果為1的次數,並輸出對應的字元。

public static char findfirstnorepeatchar(string str)

int counts=new int[26];

str=str.tolowercase();//防止出現大小寫混亂的情況

for(int i = 0; i < str.length(); i++)

for(int j = 0; j < str.length(); j++)

}return '0';

}

小結:上面開闢的乙個陣列,其實就是為了讓a~z對應。故演化出來的第二種做法就是利用帶有鍵值對的形式來解決問題。

第二思路:借助於hashmap來做。

借助於hashmap天然的集合優勢,鍵值對的形式,k儲存字元,v儲存出現的次數。故藉此來找到第乙個只出現一次的字元。

public static char findfirstnorepeatchar2(string str) 

mapmap = new hashmap<>();

str = str.tolowercase(); //防止出現大小寫混亂

int count = 0;

for (int i = 0; i < str.length(); i++) else

}for (int i = 0; i < str.length(); i++)

}return '0';

}

定義乙個函式,輸入兩個字串,從第乙個字串中刪除在第二個字串**現過的所有字元。例如從第乙個字串「we are students.」中刪除在第二個字串"aeiou"**現過的字串得到的結果是"w r stdnts."。

思路:我們可以建立乙個用陣列實現的簡單雜湊表來儲存第二個字串。這樣我們從頭到尾掃瞄第乙個字串的每乙個字元時,用o(1)時間就能判斷出該字元是不是在第二個字元中。如果第乙個字串的長度是n,那麼總的時間複雜度是o(n)。

定義乙個函式,刪除字串中所有重複出現的字元。例如輸入"google",刪除重複的字串之後的結果是"gole"。

思路:我們可以建立乙個用布林型陣列實現的簡單的雜湊表。陣列中的元素的意義是其下表看作ascii碼對應的字母在字串中是否已經出現。我們先把陣列中所有的元素都設為false。以google為例,當掃瞄到第乙個g時,g的ascii碼是103,那麼我們把陣列下標為103的元素設為true,就知道g在前面已經出現了。即我們用o(1)時間就能判斷出每個字元是否在前面已經出現過。如果是字串的長度是n,那麼總的時間複雜度是o(n)。

在英語中,如果兩個單詞**現的字母相同,並且每個字母出現的次數也相同,那麼這兩個單詞互為變位詞(anagram)。例如silent與listen、evil與live等互為變位詞。完成乙個函式,判斷輸入的兩個字串是不是互為變位詞。

思路:

在字串中找出第乙個只出現一次的字元

題目 在字串中找出第乙個只出現一次的字元。如輸入 abaccdeff 則輸出 b 1 判斷每個字元與其他字元有多少個不相同,定義陣列str,如果第i個字元只出現一次,則str i 為總字元數減1 出現兩次,str i 為總字元數減2,以此類推。如下 include include includein...

在字串中找出第乙個只出現一次的字元

題目 在字串中找出第乙個只出現一次的字元。如輸入 abaccdeff 則輸出 b 題目分析 對於在字串中找出第乙個出現一次的字元,聯絡ascii碼表,能夠得到有256中不同的字元,可以利用字元的編碼,將每個字元的編碼作為陣列的下表,建立乙個有256個元素的陣列arr 256 將陣列中的每乙個元素對應...

在字串中找出第乙個只出現一次的字元

如輸入乙個字串char s abcdacfgb 最終輸出 d 方法一 可以建立兩個指標i,j,定義計數變數int count 0 起點均為s 0 j先行,注意自己需要和自己比較 i j 0時,count 當s i 與s j 相同時,count 此時count 1,將count重新置為0,i j重新從...