所以我知道找到字谜背后的理论,显示在这里。出于我的目的,我需要找到可以从一个单词中找到的 anagrams 的数量排除重复。
允许重复,这相当简单。
aab有以下字谜:
aab
aab
aba
aba
baa
baa
Run Code Online (Sandbox Code Playgroud)
这个数量可以通过计算字母数量的阶乘来找到
factorial := 1
for i := len(word); i > 0; i-- {
factorial = i * factorial
}
// aab -> 6
Run Code Online (Sandbox Code Playgroud)
但是,如果您想排除重复项,您已将潜在的字谜从 6 个减少到 3 个。一个例子是单词hello,它有 120 个组合,但只有 60 个没有重复项。
我编写了自己的算法来制作字母映射并返回映射的长度,但这也有问题。
hello -> 24 (actually 60)
helllo -> 24 (actually 120)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
如何查找在文件中给出的单词之间的字谜.
我的解决方案
对它们进行排序然后找到重复项.
O(n mlgm).n:单词数,m:单词的最大大小
更好的解决方案?
谢谢
我已经实现了一些代码来找到txt sample.txt文件中的anagrams字,并在控制台上输出它们.txt文档在每行中包含String(word).
如果我想在txt.file中找到带有百万或二十亿字的字谜词,这是正确的使用方法吗?如果不是,在这种情况下我应该使用哪种技术?
我感谢任何帮助.
样品
abac
aabc
hddgfs
fjhfhr
abca
rtup
iptu
xyz
oifj
zyx
toeiut
yxz
jrgtoi
Run Code Online (Sandbox Code Playgroud)
oupt
abac aabc abca
xyz zyx yxz
Run Code Online (Sandbox Code Playgroud)
码
package org.reader;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test {
// To store the anagram words
static List<String> match = new ArrayList<String>();
// Flag to check whether the checkWorld1InMatch() was invoked.
static boolean flagCheckWord1InMatch;
public static void main(String[] args) {
String fileName = …Run Code Online (Sandbox Code Playgroud) 我编写了一个 Java 程序来查找 2 个字符串的 Anagram。
供参考:如果两个字符串使用完全相同的字母书写,忽略空格、标点符号和大写,则它们是字谜词。每个字母在两个字符串中的计数应该相同。例如,Army 和 Mary 是彼此的变位词。
程序:
package practice;
import java.util.ArrayList;
import java.util.List;
public class Anagram_String {
public static void main(String[] args) {
String s1="mary";
String s2="army";
int k=0;
List<String> matchedChar= new ArrayList<String>();
String charmatch="";
char[] ch1= s1.toLowerCase().toCharArray();
char[] ch2= s2.toLowerCase().toCharArray();
if(s1.length()==s2.length())
{
for(int i=0;i<s1.length();i++)
{
for(int j=0;j<s2.length();j++)
{
if(ch1[i]==ch2[j])
{
k++;
charmatch=String.valueOf(ch1[i]);
System.out.println(charmatch);
matchedChar.add(charmatch);
System.out.println("Arraylist value is "+matchedChar.toString());
System.out.println(matchedChar.size());
}
}
k=0;
}
String arrayValue=matchedChar.toString();
System.out.println("Array value is "+arrayValue);
if(arrayValue.contains(s2)){
System.out.println("String 1 and String 2 …Run Code Online (Sandbox Code Playgroud)