Azamon Web Services - #607 b
#文字列
注意
for文でやると事故りやすそう
for文でやるというのは, sを前から見て, s[i] == c[i]の間はcontinueして,
とか
s[i] > c[i]なら, sのi + 1番目以降でc[i]より小さいの探す
ただ, i + 1番目がなかったら?
すなわち, i番目が最後のとき
また, sがcより短いとき, continueし続けて終わったり
解法
一発でswapするの決めたいが, 出来るだけ後ろの文字とswapする
ケース
UBLZB BSX
BBLZU
最初のUで, 2番目のBと交換してしまう恐れ
CCC CC
---
cがsより短いとき
forでやる場合条件忘れてないか
F GZ
F
上の注意で書いた, i + 1番目以降探せない例
他人のコード
while (T --) { cin >> a >> b; int x = -1, sx = 0, sy = 0; for (int i = (int)a.length() - 1; i >= 0; i --) { // swapするsx, sy決める // xはiより後ろの, iより後ろで一番小さいの if (x != -1 && a[i] > a[x]) { sx = x; sy = i; } // ひたすら小さい文字探す if (x == -1 || a[i] < a[x]) { x = i; } } swap(a[sx], a[sy]); if (a < b) { cout << a << endl; } else { cout << "---" << endl; } } }