読者です 読者をやめる 読者になる 読者になる

マトリョーシカ的日常

ワクワクばらまく明日のブログ。

しきりにしきりたがったが、たかがはずれがたがた(SRM327 div2 level1)

少し前をみつめる

http://instagr.am/p/Wh4orRhBBg/


TopCoder Statistics - Problem Statement

正答率85%。文字列処理も慣れればなんとかなります。
問題:ふぁにーなフェンスなんだよこれ、 | と-だけでなる文字列があって、前後で違う文字ならばフェンスになるんだ。適当な文字列からフェンスの最大の長さを返してね。

例:
"-|-|-|-" :7
"|-|---|-|---|-|" :5
"|||-||--|--|---|-||-|-|-|--||---||-||-||-|--||" :8

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;
 class FunnyFence{
    public:
     int getLength(string s){
         int k=1,j=0;
         for(int i=1;i<s.size();i++){
             if(s[i]!=s[i-1]) {
                 k+=1;
             }else{
                 j=max(j,k);
                 k=1;
             }
             
         }
         j=max(j,k);
         printf("%d\n",j);
         return j;
     }
};

int main(){
    FunnyFence ob1;
    string f("|||-||--|--|---|-||-|-|-|--||---||-||-||-|--||");
    ob1.getLength(f);
    return 0;
}
  • 一文字前と今の文字が同じならkはプラス1。
  • 違っていて、なおかつ今までで最大のkだったらjにkを代入。
  • s.size()で文字列の長さを返します。