TCO 1R 250 - EqualizeStrings
問題
2 つの文字列が与えられ,その2つの文字列が一致するように文字の変更(文字列中の1文字をアルファベット順的な前後の文字(…y<->z<->a<->b<->c…)に変更する)を行う.この操作数を最小にする変更後の文字列のうち,辞書順的に最初のものは何?
考え方
結果的に辞書順で若い方にするので,基本的には i 番目の文字は若い方に合わせる.ただし,若い方に合わせる距離が短い工程において z<->a の移動がある場合,a に合わせるのが最良になる.
コード
#include <string> using namespace std; class EqualizeStrings { public: string getEq(string s, string t) { for( int i = 0 ; i < s.size() ; ++i ) { if( s[i] > t[i] ) { char c = s[i]; s[i] = t[i]; t[i] = c; } if( t[i] - s[i] > 12 ) s[i] = 'a'; } return s; } };