練習問題No.4辞書順最小問題(欲張り法)
2625 ワード
要求
長さNの文字列Sが与えられ、長さNの文字列Tが構築される.最初、Tは空欄であり、その後、以下の任意の操作を繰り返した.1.Sのヘッダから1文字を削除し、Tの末尾に加算する.2.Sの末尾から1文字を削除し、Tの末尾に追加する
入力フォーマット
出力フォーマット
T
テスト入力
ACDBCB
テスト出力
ABCBCD
問題を解く構想.
, 。
, T , , , , , 。
コード#コード#
#include
#include
#include
using namespace std;
int main() {
string str;
string str2;
getline(cin, str);
ostringstream is(str2);
int size = str.length();
int head = 0;
int tail = size - 1;
bool left = false;
while ( head <= tail) {
left = false;
for (int i = 0; head + i <= tail; i++) {
if (str[head + i] < str[tail - i]) {
left = true;
break;
} else if (str[head + i] > str[tail - i]){
left = false;
break;
}
}
if (left) {
is << str[head++];
} else {
is << str[tail--];
}
}
cout << is.str() << endl;
return 0;
}