算法:統(tǒng)計(jì)字符出現(xiàn)的次數(shù)(僅限字母)

  1. 編程題:RLE算法,編寫一個(gè)函數(shù),實(shí)現(xiàn)統(tǒng)計(jì)字符次數(shù)的功能:例如輸入為aaabbccc,輸出為a3b2c3。不限語(yǔ)言。

這是一道算法題
1.首先我們得分析輸入字符的肯能性
1).輸入aaabbccc ,輸出 a3b2c3,重復(fù)的字符在一起,這種是最簡(jiǎn)單的
2).輸入AAaaabbBBcccC ,輸出 A2B2C1a3b2c3,大小寫字母放在一起,和第一種類似
3).輸入abaaccbc ,輸出 a3b2c3,重復(fù)的字符沒在一塊,我們需要逐一找到重復(fù)的字符,相對(duì)比較麻煩些。
4).輸入abaAaBBcCcCCbc ,輸出 A1B2C3a3b2c3,與第三種類似
目前大體上就是這四種輸入的可能性。
2.根據(jù)輸入的字符串找到規(guī)律
通過輸入的字符串,我們可以確定只有字母(大小寫),所以我們所要統(tǒng)計(jì)的字符種類就只有52種,在ASCII碼表中"A" 的十進(jìn)制是 65,"a" 的十進(jìn)制是97,因此通過對(duì)應(yīng)關(guān)系我們可以定義一個(gè)容量大小為58(為什么是58而不是52,這是因?yàn)閍和A之前差了32,盡管中間有6個(gè)字符沒用,但是為了方便處理,所以多定義6個(gè)字符的空間)的數(shù)組分別存每個(gè)字符出現(xiàn)的次數(shù),這樣就可以解決這個(gè)問題了。
3.根據(jù)2的規(guī)律編寫c程序
代碼如下

void c_sumOfCharacters(char * str){
     int i = 0;
     int num[58] = {0};
     while (str[i] != '\0') {
          if ('A' <= str[i] && str[i] <= 'Z') {
               int index = str[i] - 'A';
               num[index] = num[index]+1;
          }else if ('a' <= str[i] && str[i] <= 'z'){
               int index = str[i] - 'a' + 32;
               num[index] = num[index]+1;
          }
          i++;
     }
     for (int i = 0; i < 58; i++) {
          int count = num[i];
          if (count != 0) {
               char c = 'A'+i;
               printf("%c%d",c,count);
          }
     }
}

輸入:AbbFFeeewwQQQAFF
輸出:A2F4Q3b2e3w2
4.oc代碼
oc的實(shí)現(xiàn)邏輯相比較c語(yǔ)言有比較大的差別,沒有運(yùn)用2中所描述的規(guī)律,不過用了oc中字典的特性,不可重復(fù)的特性,我是用了一個(gè)數(shù)組保存找到的字符和出現(xiàn)的次數(shù),用字符作為鍵,出現(xiàn)的次數(shù)作為值,具體代碼如下:

-(void)oc_sumOfCharacters:(NSString*)str{
     //保存每種字符出現(xiàn)的次數(shù)  key是字符  value 是字符出現(xiàn)的次數(shù)
     NSMutableDictionary * resultDic = [NSMutableDictionary dictionaryWithCapacity:0];
     for (int i = 0; i < str.length; i++) {
          //取出i位置的字符
          NSString * charStr = [self indexCharForStr:str index:i];
          if (charStr == nil) {
               continue;
          }
          //獲取所有的key
          NSArray * resultKeys = resultDic.allKeys;
          //判斷字符是否在里面
          if ([resultKeys containsObject:charStr]) {
               //存在 取出該字符出現(xiàn)的次數(shù) 加1再重新設(shè)置
               NSInteger count = [[resultDic objectForKey:charStr] integerValue];
               [resultDic setValue:@(count + 1) forKey:charStr];
          }else{
               //不存在 將該字符存到resultDic中
               [resultDic setValue:@(1) forKey:charStr];
          }
     }
     NSMutableString * resultStr = [NSMutableString string];
     [resultDic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
          [resultStr appendFormat:@"%@%@",key,obj];
     }];
     NSLog(@"%@",resultStr);
}

其中對(duì)于取出字符串某個(gè)位置的字符我是用了字符串截取的方法實(shí)現(xiàn)了獲取某一位置的字符的方式代碼如下:

//取出字符串對(duì)應(yīng)位置的字符
-(NSString *)indexCharForStr:(NSString *)aimStr index:(NSInteger)index{
     if (index >= aimStr.length) {
          return nil;
     }
     if (index > 0) {
          NSString * subToStr = [aimStr substringToIndex:index+1];
          return [subToStr substringFromIndex:index];
     }else{
          return [aimStr substringToIndex:1];
     }
     return nil;
}

輸入:AeeDeewzaaaAAA
輸出:A4w1D1e4z1a3

想要試的可以直接復(fù)制代碼進(jìn)行嘗試,有更好的方法也歡迎討論交流。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí),c語(yǔ)言,java語(yǔ)言,單片機(jī)的匯編語(yǔ)言等;大學(xué)畢...
    oceanfive閱讀 3,367評(píng)論 0 7
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,313評(píng)論 0 10
  • 又到月底,趕緊來還債。 人生可能真的由很多機(jī)緣巧合組成,沒有什么比“復(fù)習(xí)到考前題目”更幸運(yùn)的了。最近一個(gè)月,新的一...
    于是晴天閱讀 411評(píng)論 0 0
  • 有個(gè)朋友從新西蘭玩了半個(gè)月回來,一下飛機(jī)就發(fā)了一條朋友圈:受到世界極簡(jiǎn)主義風(fēng)格影響,一回家扔了一半的東西。 很高興...
    愛喝水的好少年閱讀 519評(píng)論 0 0
  • 1、經(jīng)歷了樓市變化的洗禮之后,美國(guó)人最先意識(shí)到:原來房子這么靠譜的東西也是會(huì)跌的??!既然車子會(huì)折舊,房子會(huì)貶值,手...
    Jane_102閱讀 238評(píng)論 0 0

友情鏈接更多精彩內(nèi)容