SRM391 DIV2 Level.2
文字列が与えられて、その中の文字を一意に置き換えたら同じになる組み合わせが何個あるか求めろという問題。
C#がよくわかってないんで大分適当。システムテストにパスしたからまあいいんだけどさー。
if (list[i].Equals(list[j]))って書き方は駄目なの?
public class IsomorphicWords { int[] getHash(String s) { Dictionary<char, int> dic = new Dictionary<char,int>(); int index = 0; foreach (char c in s) { if (!dic.ContainsKey(c)) { dic[c] = index; index++; } } int[] hash = new int[s.Length]; for (int i = 0; i < s.Length; i++) { hash[i] = dic[s[i]]; } return hash; } bool isEqual(int[] list, int[] list2) { bool flag = true; int len = list.Length; for (int i = 0; i < len; i++) { if (list[i] != list2[i]) { flag = !flag; break; } } return flag; } public int countPairs(String[] words) { List<int[]> list = new List<int[]>(); int len = words.Length; for (int i = 0; i <len; i++) { list.Add(getHash(words[i])); } int count = 0; for (int i = 0; i < len; i++) { for (int j = 0; j < len; j++) { if (i == j) { break; } if (isEqual(list[i], list[j])) { count++; } } } return count; } }