尋找字串中第乙個未重複的字元

2021-07-04 13:14:48 字數 1194 閱讀 3180

設想這樣乙個場景,有一天你黑進去乙個server,獲取的是普通使用者許可權,但是你在普通使用者根目錄下發現乙個readme檔案,上面寫著要獲取server的管理員口令,在當前使用者的根檔案目錄下有個檔案,獲取檔案每一行第乙個未重複的字元,一共有20行,最後這20個字元組成的就是這個系統的根口令。這裡需要注意的是,口令中不能含有控制符號與空格符號,所以需要對檔案進行過濾。

分析這個問題後,我們需要進行兩步,一步是過濾,一步是統計每行字元出現的頻數,並且把第乙個為1的字元列印出來。

空格以及控制字元占用了ascii表前32個,所以我們需要過濾掉這前32個。

所以有下面**,處理完每一行將結果存入tmp陣列中:

void inputcheck(char str,char tmp)

i++;

}}

然後需要對處理過的每行字串進行統計,演算法的思路很簡單,口令裡面使用到的字元從ascii的33開始到127結束,總共有96個字元,所以我們建立乙個大小為96的頻數陣列儲存每個字元出現的頻數,然後從字串的順序開始尋找頻數陣列裡面為一的第乙個字元,所以有下面的**:

void find(char str)

; int index=0;

while(str[i]!='\0')

i=0;

while(str[i]!='\0')

i++;

}}

開啟檔案的時候,有個小問題忘記掉了,fopen的時候,w+與w雖然都是以可寫的形式開啟檔案,但是開啟後會將檔案清空為0。

為了模擬各種檔案,我們需要手動輸入內容到檔案,然後再讀入在進行處理。

int main()

,str[2048]=,processor[2048]=;

printf("please input the data of lines,t<=20:\n");

scanf("%d",&t);

if(t>20)

else

{ /*清空檔案*/

fpw=fopen("./str.txt","w+");

fclose(fpw);

/*追加方式開啟檔案*/

fpw=fopen("./str.txt","a");

if(fpw==null)

printf("no file\n");

fflush(stdin);

while(n

字串 第乙個不重複的字元

有關這個題目可以有很多的考察方式,但是本質的乙個方法就是利用hash表,來降低時間複雜度。先看第乙個題目,給定乙個字串,找到這個字串的第乙個不重複的字元 在乙個字串 1 字串長度 10000,全部由字母組成 中找到第乙個只出現一次的字元的位置。若為空串,返回 1。位置索引從0開始。所以 實現 int...

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

方法一 不要求時間複雜度,只要求做出來 兩次迴圈巢狀,遍歷字串。int find one char str,int len if count 2 if count 1 j len return 1 intmain 輸出結果 方法二 要求時間複雜度為o n 根據字元ascii 字元特性,先統計每個字元...

找出字串中第乙個不重複的字元

leetcode原題位址 將字串轉換成字元陣列 使用兩層迴圈遍歷,最終根據第二層迴圈退出時的下標值來判斷是否是不重複的字元 我的 public intfirstuniqchar string s if temp i temp j if j length if i length return resu...