TopCoder SRM 374 Div1 Easy SyllableSorting
問題
Syllable sortingとは、文字列を音節に分解したものを元に文字列をソートすることを言う。
ここで、音節に分解するとは単語を、(空で無い子音が連続するものを最も長く取る)+(空で無い母音が連続するものを最も長く取る)に分割することである。
二つの文字列を比較するには、
音節に分割したそれぞれの単語の音節について、
まずアルファべット順にソートし、それぞれを辞書順による比較をして、最初に異なったものの大小で比較する。
アルファベット順にソートした音節が同じなら、ソートする前の音節で、それぞれを辞書順による比較をして、最初に異なったものの大小で比較する。
与えられた文字列の集合をSyllable sortingによって並べ替えた後の文字列の集合を返せ。
制約条件
文字列の数≦50
それぞれの文字列の文字数≦50
方針
定義にしたがって文字列の比較を実装する。
ソースコード
vs func(string a){ vs ret; string s; bool c=1; rep(i,a.size()){ if(a[i]=='a'||a[i]=='i'||a[i]=='u'||a[i]=='e'||a[i]=='o'){ s.pb(a[i]); c=0; } else{ if(c==1)s.pb(a[i]); else{ ret.pb(s); s=""; s.pb(a[i]); c=1; } } } if(s!="")ret.pb(s); return ret; } bool cmp(string a,string b){ vs A=func(a), B=func(b); vs C=A, D=B; sort(all(A)); sort(all(B));; if(A!=B)return A<B; return C<D; } class SyllableSorting { public: vector <string> sortWords(vector <string> words) { sort(all(words),cmp); return words; } };