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;
  }
};