確定長字串中是否含有短字串的所有字母

2022-09-01 01:15:12 字數 831 閱讀 8938

在網上看到的一道面試題,思路和作者想的差不多,在這裡整理下:

題目例項如下:

比如,如果是下面兩個字串:

string 1: abcdefghlmnopqrs

string 2: dcgsrqpom

答案是true,所有在string2裡的字母string1也都有。如果是下面兩個字串:

string 1: abcdefghlmnopqrs

string 2: dcgsrqpoz

答案是false,因為第二個字串裡的z字母不在第乙個字串裡。

假設:string 1 長度為 m

string 2 長度為 n

1.最先想到的方案:

遍歷 string 2,檢視其每乙個字母是否出現在 string 1中,這是思路最簡單但是時間複雜度最高的想法,時間複雜度 o(m*n)。

2.第二個方案

先對連個字串排序,然後再依次遍歷兩個字串,時間複雜度 排序( o(mlogm + nlogn) ) + 遍歷( o(m+n) )。

3.第三個方案

本來我只想到了方案2,但是作者說還有更好的,我又想了下,結果確實有。

我的思路是,建立乙個 26 大小的陣列 szflag[26],初始化為 0 ,分別對應26個字母,然後遍歷 string 1, 將字母對應位置置為 1。然後遍歷 string 2,檢視各個字母位置是是否都是 1即可,複雜度 o(m+n)。( 或者用乙個hashtable儲存各個字母)

4.看到作者介紹的兩外乙個思路挺有意思

對於sting 1 將各個字母分配乙個素數,然後逐個相乘,獲得乙個大數,用該大數除以string 2 中的各個字母,檢視是否有餘數來判定。

定長字串

字串的定長順序儲存方式,字串將位於棧上,其本身為以 0 結尾的一串字元陣列 ifndef sstring h define sstring h include include include include define stringlength 20 typedef unsigned char u...

檢測是否含有禁止字串

檢測是否含有禁止字串 如果禁止字串出現次數為 5,測返回 true 引數說明 badwordlist 禁止字元列表 以 號隔開 str 被檢測字串 返回值 boolean 小男 2006 更新 no miss function checkbadword byval badwordlist,byval...

獲得定長字串

c 中的字串是unicode編碼,length是unicode的char的個數。所以,假如乙個字串中中英文混雜,又想獲得乙個固定寬度的字串,就比較麻煩。單純轉換成位元組再擷取難免會碰到半個漢字的問題。下面實現了這樣的功能,返回固定位元組長度的字串,如果發生截斷,後面補充2個或者3個 根據截斷點的位置...