1. 程式人生 > >字典序最小問題 (POJ3617)

字典序最小問題 (POJ3617)

給定一個長度為N的字串S,要構建一個長度為N的字串T。起初T是一個空的字串,隨後重複進行一下任意操作;

從S的刪除一個字元新增到T的尾部

從S的部刪除一個字元新增到T的尾部

目的:

使得T的字典序儘可能小

*字典序字典序是從前到後比較兩個字串大小的方法, 首先比較第一個字元,如果不同,則第一個字元較小的字串更小,如果相同則繼續比較第二個字元.......如此繼續,比較整個字串的大小

// 貪心演算法2 P 42
//

#include "stdafx.h"
#include<iostream>
#include<math.h>
#include <algorithm>
#define MAX_N 6
using namespace std;
int N=6;
char S [MAX_N+1];
int a = 0;
int b = N - 1;
void solve() {
	while (a <= b) {
		bool left = false;
		for (int i = 0; a + i <= b; i++)
		{
			if (S[a + i] < S[b - i]) {
				left = true;
				break;
			}
			else if (S[a + i] > S[b - i]) {
				left = false;
				break;
			}
		}
		if (left) putchar(S[a++]);
		else putchar(S[b--]);

	}
	putchar('\n');
}

int main()
{
	cout << "please input S\n";
	cin >> S;
	cout << "this is T\n";
	solve();
	cout << S << endl;
	while (1);
	
    return 0;
}