少し前をみつめる
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()で文字列の長さを返します。