anagram是一个由另一个人通过重新排列其字母而形成的单词,只使用所有原始字母一次;例如,管弦乐队可以重新安排到马车上。
我想写一个函数以任何顺序返回给定单词的所有字谜(包括单词本身)。
例如GetAllAnagrams("abba")
应返回包含"aabb", "abab", "abba", "baab", "baba", "bbaa"
。
任何帮助都将不胜感激。
答案 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();
}
以下是结果的屏幕截图:
最后,完整的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中解决字谜的方法,希望它有所帮助。