實現刪除字符串中出現次數最少的字符,若多個字符出現次數一樣,則都刪除。輸出刪除這些單詞后的字符串,字符串中其它字符保持原來的順序。
字符串只包含小寫英文字母, 不考慮非法輸入,輸入的字符串長度小于等于20個字節。
輸出描述:
刪除字符串中出現次數最少的字符后的字符串。
輸入例子:
abcdd輸出例子:
dd此題可以引用《華為機試在線訓練-牛客網(12)密碼驗證合格程序》一文中衍生問題的一個思路,不過此處更簡單,不需要統計子串重復情況而是統計字符重復情況,對于字符統計可以直接使用泛型算法count()。另外記錄下重復次數最少的所有索引,根據索引號用“0”替換,再調用remove()算法刪除所有為'0'的字符。注意:此處不能直接用string::erase()循環刪除pos位置的字符,因為每次根據pos刪除一個字符后索引號已改變,下一次刪除無效。
完整AC的代碼如下:
#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;int main(){ string inStr; while(getline(cin,inStr)){ int tempCnt=0; int minCnt=100; vector<int > minPos; for(int i=0;i<inStr.size();i++){ tempCnt= count(inStr.begin(),inStr.end(),inStr[i]); if(tempCnt<=minCnt){ if(tempCnt<minCnt)minPos.clear(); minCnt=tempCnt; minPos.push_back(i); } } for(auto pos:minPos) inStr.replace(pos,1,"0"); int pos; while((pos=inStr.find('0'))!=string::npos){ inStr.erase(pos,1); } cout<<inStr<<endl; }}
|
新聞熱點
疑難解答