1256 Anagram

「1256 Anagram」の編集履歴(バックアップ)一覧はこちら

1256 Anagram」(2006/05/13 (土) 23:56:54) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

**1256 Anagram **解答例 import java.util.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for(int c=0;c<n;c++){ String original = sc.next(); int m = original.length(); char[] min = original.toCharArray(); Character[] rmin = new Character[m]; for(int i=0;i<m;i++) rmin[i] = min[i]; Arrays.sort(rmin, new CharacterComparator()); for(int i=0;i<m;i++) min[i] = rmin[i]; System.out.println(new String(min)); if(m==1) continue; int[] perm = new int[m]; for(int i=0;i<m;i++){ perm[i] = i; } int l = m - 2; while(true){ boolean[] used = new boolean[m]; for(int i=0;i<m;i++) used[i] = false; for(int i=0;i<l;i++) used[perm[i]] = true; int k = perm[l] + 1; while(k<m && perm[l]>=0 && min[k]==min[perm[l]]) k++; while(k<m && used[k]) k++; if(k<m){ perm[l] = k; if(l==m-1){ char[] cs = new char[m]; for(int i=0;i<m;i++) cs[i] = min[perm[i]]; String s = new String(cs); System.out.println(s); } else if(l<m-1){ perm[l+1] = -1; l++; } } else l--; if(l<0) break; } } } } class CharacterComparator implements Comparator<Character>{ public int compare(Character c1, Character c2){ int x1, x2; if('a'<=c1&&c1<='z') x1 = (c1-'a') * 2 + 1; else x1 = (c1-'A') * 2; if('a'<=c2&&c2<='z') x2 = (c2-'a') * 2 + 1; else x2 = (c2-'A') * 2; if(x1>x2) return 1; else if(x1<x2) return -1; else return 0; } }

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。