牛客網 華為機試 023

2021-08-03 18:35:24 字數 1336 閱讀 1936

實現刪除字串中出現次數最少的字元,若多個字元出現次數一樣,則都刪除。輸出刪除這些單詞後的字串,字串中其它字元保持原來的順序。 

字串只包含小寫英文本母, 不考慮非法輸入,輸入的字串長度小於等於20個位元組。

刪除字串中出現次數最少的字元後的字串。

示例1

abcdd

dd

思路一:剛開的思維太江化(-1s),**很複雜,想的太複雜了。我是這麼想的:統計26個字母的次數,找到最小次數,把最小次數的字元加入vector,然後遍歷原字串,如果不是在vector中則輸出,2ms。 這種思路不可取,作為反面教材警示後人

#include #include #include using namespace std;

//返回記錄次數最小的乙個或者多個字元

vectorleast(vectorrecord, int& count)

count = min; //字串出現最少的次數

return res;}

int main()

int count = 0;

vectordel = least(record, count);

int len = str.size() - count * del.size(); //計算刪除後的總字串長度

string resstr (len, ' ');

int i = 0;

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

}cout << resstr << endl;

}return 0;

}

思路二:只要遍歷字串,統計字元次數,然後再遍歷一遍,同時儲存次數最小值,遍歷完後得到最小值。然後再遍歷,如果次數大於最小次數則輸出。2ms

#include #include using namespace std;

int main()

; //統計字元數

for(char c : str)

++record[c-'a'];

//求最小次數

int min = record[str[0] - 'a']; //不要遍歷record找最小值,太複雜太複雜太複雜

for(int i = 0; i < len; ++i)

//輸出

for(int i = 0; i < len; ++i)

cout << endl;

}return 0;

}

思想不要僵化

牛客網 華為機試 020 牛客網

密碼要求 1.長度超過8位 2.包括大小寫字母.數字.其它符號,以上四種至少三種 3.不能有相同長度超2的子串重複 說明 長度超過2的子串 一組或多組長度超過2的子符串。每組佔一行 如果符合要求輸出 ok,否則輸出ng 示例1 021abc9000 021abc9abc1 021abc9000 02...

牛客網 華為機試 009

輸入乙個int型整數,按照從右向左的閱讀順序,返回乙個不含重複數字的新的整數。輸入描述 輸入乙個int型整數 輸出描述 按照從右向左的閱讀順序,返回乙個不含重複數字的新的整數 示例1 9876673 37689 思路 維護乙個陣列或者vector長度為10,下標0 9代表取得數字,值代表是否已經輸出...

牛客網 華為機試 015

輸入乙個int型的正整數,計算出該int型資料在記憶體中儲存時1的個數。輸入乙個整數 int型別 這個數轉換成2進製後,輸出1的個數 示例1 5 2 思路一 利用十進位制轉二進位制的方法,統計1的個數。事實證明這種方法是大錯特錯了,因為效率不高且沒有考慮負數的情況,負數補碼,完全不能這麼計算 inc...