功能Anagram

时间:2016-07-08 05:36:40

标签: c# string anagram

anagram是一个由另一个人通过重新排列其字母而形成的单词,只使用所有原始字母一次;例如,管弦乐队可以重新安排到马车上。

我想写一个函数以任何顺序返回给定单词的所有字谜(包括单词本身)。

例如GetAllAnagrams("abba")应返回包含"aabb", "abab", "abba", "baab", "baba", "bbaa"

的集合

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

这是一个工作函数,利用了elsewhere on stack overflow

找到的GetPermutations()扩展名
struct.unpack()

这是GetPermutations()扩展,它还有其他必要的扩展:

public static List<string> GetAnagrams(string word)
{
    HashSet<string> anagrams = new HashSet<string>();
    char[] characters = word.ToCharArray();

    foreach (IEnumerable<char> permutation in characters.GetPermutations())
    {
        anagrams.Add(new String(permutation.ToArray()));
    }

    return anagrams.OrderBy(x => x).ToList();
}

以下是结果的屏幕截图:

GetAnagrams - abba

最后,完整的Visual Studio解决方案的github存储库:Github

答案 1 :(得分:-1)

import java.util.Scanner;

import java.lang.String;

public class KrishaAnagram

{
 public static void main(String[] args) {
  Scanner Scan = new Scanner(System.in);
  String s1, s2;
  int sum1, sum2;

  sum1 = sum2 = 0;

  System.out.print("Enter fisrt string: ");
  s1 = Scan.next();
  System.out.print("Enter Second string: ");
  s2 = Scan.next();

  if (s1.length() != s2.length()) {
   System.out.println("NOT ANAGRAM");
  } else {
   for (int i = 0; i < s1.length(); i++) {
    char ch1 = s1.charAt(i);
    char ch2 = s2.charAt(i);
    sum1 += (int) ch1;
    sum2 += (int) ch2;
   }
   if (sum1 == sum2)
    System.out.println("IT IS AN ANAGRAM : s1 = " + sum1 + "s1 = " + sum2);
   else
    System.out.println("IT IS NOT AN ANAGRAM : s1 = " + sum1 + "s1 = " + sum2);;
  }
 }
}

//这是我在java中解决字谜的方法,希望它有所帮助。