1. 程式人生 > 其它 >刪除字串中出現次數最少(最多)的字元

刪除字串中出現次數最少(最多)的字元

@

目錄

注意:用的min_element()函式count()函式等都需要包含標頭檔案 include <algorithm>

刪除出現次數最少的

題目:給定一個字串,刪除出現字數最少的字元。

思路:字元最多26個,用長度為26的陣列儲存各個字元的數量,然後計算出最小值,再對字串遍歷一遍,如果字元對應的數字大於最小值就輸出(排除次數為0的情況)。注意一點是字元出現次數可能是0,這種情況要排除的。

1、方法一

string delChar(string s,int Len)
 {
	int arr[26]={0};
	for(int i=0;i<Len;++i)   //求各個字元的個數
	    arr[s[i]-'a']++;
	string s1="";
    //int* q = min_element(arr, arr + 26);   //返回陣列最小值,但這極大可能可能為0,所以要排除0的干擾,這法子不行
    int min=*(max_element(arr, arr + 26));  //初始化為陣列最大值
    for(int i=0;i<26;++i){
        if(arr[i]>0&&arr[i]<min){    //排除0的干擾並求最小值
            min=arr[i];
        }
    }
	for(int j=0;j<Len;++j){   //把出現次數不是最小值的字元加到結果字串中
		if(arr[s[j]-'a']>min)
			s1 += s[j];
	}
	return s1;
 }

2、方法二

換一種用count()函式求字元數量的

string delChar(string s,int Len)
 {
	int arr[26]={0};
	for(int i=0;i<26;++i){
        arr[i]=count(s.begin(), s.end(), char(i+'a'));  //用count函式求字元數量
    }    
    int min=*(max_element(arr, arr + 26));  //初始化為陣列最大值
    for(int i=0;i<26;++i){
        if(arr[i]>0&&arr[i]<min){    //排除0的干擾並求最小值
            min=arr[i];
        }
    }
    string s1="";
	for(int j=0;j<Len;++j){
		if(arr[s[j]-'a']>min)
			s1 += s[j];
	}
	return s1;
 }

count()函式的使用可以看這篇博文第四個標題對應內容 4、找出源字串中有多少個目標字元,如在"the food is delicious" 找出有多少個’i’ ,答案3個

刪除出現次數最多的

再來一個刪除出現最大次數的字元

string delChar(string s,int Len)
 {
	int arr[26]={0};
	for(int i=0;i<26;++i){
        arr[i]=count(s.begin(), s.end(), char(i+'a'));  //用count函式求字元數量
    }    
    int max=*(max_element(arr, arr + 26));  //求陣列最大值
    string s1="";
	for(int j=0;j<Len;++j){
		if(arr[s[j]-'a']!=max && arr[s[j]-'a']!=0)
			s1 += s[j];
	}
	return s1;
 }

利用利用find()函式和erase()函式來刪除

最後一步求s1也可以用刪除原字串中滿足條件的字元來實現,比如利用find()函式和erase()函式來實現

    ....
    string s1=s;
	for(int j=0;j<26;++j){
        if(arr[j]==max){           //如果出現了max次,就刪除字元  char(j+'a')  max次
            for(int i=0;i<max;++i){
                int position=s1.find(char(j+'a'));
                s1.erase(position,1);
             }  
         }
	}
	return s1;

關於find()函式和erase()函式的用法可以參照我的這篇博文 c++裡面的find()和erase()