このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題についておおまかに説明する。
回文というのは、文字を右から読んでも左から読んでも同じになる文字列を指す。sという文字列が与えられたとき、sを最小限変えることで回文を作成せよ。文字を変えるというのは、ある場所の文字を置き換えるということである。文字を削ることや付け加えることは認められていない。もし回答が複数あるなら、アルファベット順で最も早く来る物を返せ。
私の解答はこちら。
public class Palindromize2 { public String minChanges(String s) { StringBuffer sb = new StringBuffer(); for( int i=0 ; i<s.length(); i++ ){ // headとtailから順にi番目を比較して、先に来る方をcとする char h = s.charAt(i); char t = s.charAt(s.length()-i-1); char c = h > t ? t : h; sb.append(c); } return sb.toString(); } }
得点は236.12/250、中央値は約228点。実は文字の交換回数が最小とかは関係ないというオチ。
0 件のコメント:
コメントを投稿