找出一个字符串中出现次数最多的字_Day34:第一个只出现一次的字符
劍指Offer_編程題——第一個只出現(xiàn)一次的字符
題目描述:
在一個字符串(0<=字符串長度<=10000,全部由字母組成)中找到第一個只出現(xiàn)一次的字符,并返回它的位置,如果沒有則返回-1,需要區(qū)分大小寫。(從0開始計數(shù))。具體要求:
時間限制: C/C++ 1秒,其他語言2秒空間限制: C/C++32M,其他語言64M
具體思路:
思路一:
這道題剛開始感覺特別簡單,可以用最簡答、最粗暴的方法就可以解決,結(jié)果發(fā)現(xiàn),其實(shí)是錯的,其實(shí),我們可以用python中的字典,只要定義一個字典即可將問題簡單化。我們只需要把這些數(shù)字存在字典里,然后遍歷整個字符串,如果i在count里,則count+1,否則將count置為1.重新遍歷該字符串,這時候我們用到了 Python中的enumerate函數(shù),在判斷count是否為1,如果匹配成功,則返回該下標(biāo)。具體我們用python實(shí)現(xiàn)該思路:
class Solution:def FirstNotRepeatingChar(self, s):if s == "":return -1else:count = {}for i in s:if i in count:count[i] += 1else:count[i] = 1for index, i in enumerate(s):if count[i] == 1:return index代碼效果圖如圖所示:
思路二
這道題其實(shí)可以用hashcode來解決。利用每個字母的ASCII碼作hash來作為數(shù)組的index。首先用一個58長度的數(shù)組來存儲每個字母出現(xiàn)的次數(shù),為什么是58呢,主要是由于A-Z對應(yīng)的ASCII碼為65-90,a-z對應(yīng)的ASCII碼值為97-122,而每個字母的index=int(word)-65,比如g=103-65=38,而數(shù)組中具體記錄的內(nèi)容是該字母出現(xiàn)的次數(shù),最終遍歷一遍字符串,找出第一個數(shù)組內(nèi)容為1的字母就可以了,時間復(fù)雜度為O(n)。
具體用java實(shí)現(xiàn)該思路:
public class Solution{public int FirstNotRepeatingChar(String str){int[] words = new int[58];for(int i = 0; i < str.length(); i++){words[(int)str.charAt(i) - 65] += 1;}for(int i = 0; i < str.length(); i++){if(words[(int)str.charAt(i) - 65] == 1)return i;}return -1;} }代碼效果圖如圖所示:
總結(jié)
本道題主要考察字符串中字符出現(xiàn)的次數(shù),剛開始想當(dāng)然了,結(jié)果發(fā)現(xiàn)簡單、粗暴的做法根本行不通,因此,轉(zhuǎn)變了思路,用到了python中的字典,以及java中的hashcode,可以利用ASCII碼作為index,總體來說該題還是挺簡單的。因此,我們在做題的時候,應(yīng)該多次嘗試各種方法,擴(kuò)展自己的思維,寫出優(yōu)質(zhì)的代碼。總之,我們要繼續(xù)加油,爭取早日找到工作,Good Luck!!!
參考文獻(xiàn)
[1]楊二K
[2]zyp7355
總結(jié)
以上是生活随笔為你收集整理的找出一个字符串中出现次数最多的字_Day34:第一个只出现一次的字符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 「自控元件及线路」1.2 电机中的磁性材
- 下一篇: 火焰效果材质实现_「游戏开发」使用Uni