标签: anagram

anagram算法

这是为文本生成字谜的最佳方法(最多80个字符长度).示例:输入:狗输出狗dgo odg ogd gdo god

我只想到一个回溯解决方案,但如果文本更长,那将需要一段时间.

另一个想法是为字典中的所有单词构建,但问题并不是要求真正的单词.

有人能指出最小时间复杂度解决方案吗?

谢谢!

c# algorithm anagram

2
推荐指数
2
解决办法
5337
查看次数

你如何对字符串进行排序,使得字谜在C++中彼此接近?

它实际上是用Java实现的,因为你可以使用Comparator和内置方法对字符数组进行排序并比较这样的字符串:

public class AnagramComparator implements Comparator<String> {
 public String sortChars(String s) {
   char[] content = s.toCharArray();
   Arrays.sort(content);
   return new String(content);
 }

public int compare(String s1, String s2) {
   return sortChars(s1).compareTo(sortChars(s2));
 }
}
Run Code Online (Sandbox Code Playgroud)

但我想知道如何在C++中实现它?编写上述Java代码中使用的内置方法的C++等价物绝对是一种选择.还有其他智能方式吗?

c++ sorting string similarity anagram

2
推荐指数
1
解决办法
1161
查看次数

检查两个字符串是否是使用C++的字谜

我想出了下面的程序来检查两个字符串是否是字谜.它适用于小字符串,但适用于较大的字符串(我试过:听过,入伍)它给我一个'不!'

救命 !

#include<iostream.h> 
#include<string.h>
#include<stdio.h>

int main()
{
    char str1[100], str2[100];
    gets(str1);
    gets(str2);
    int i,j;
    int n1=strlen(str1);
    int n2=strlen(str2);
    int c=0;
    if(n1!=n2)
    {
          cout<<"\nThey are not anagrams ! ";
          return 0;
    }
    else 
    {
         for(i=0;i<n1;i++)
             for(j=0;j<n2;j++)
                 if(str1[i]==str2[j])
                     ++c;
    }
    if(c==n1)
        cout<<"yes ! anagram !! ";
    else 
        cout<<"no ! ";

    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ string char anagram

2
推荐指数
1
解决办法
3万
查看次数

查找字谜JavaScript jQuery

让我说我有一个像这样的列表

狗dOg上帝狗狗狗斑马木头

我想要做的是查找列表中的所有单词,无论是否大小写,或者无论实际单词如何.我想匹配这些字母并计算一下.从上面来说

狗,dOg,上帝都会成为一个匹配,在这种情况下会返回"3"作为计数,但是狗,狗,斑马,木头..都将是独一无二的,所有人都将返回1作为计数..虽然我知道这是可能的我不知道从哪里开始.anagram概念让我有点失望.有任何想法吗?

javascript string jquery anagram

1
推荐指数
1
解决办法
1316
查看次数

如何在php中改变单词的字母

我在一些SO帖子上看到要乱洗数组,你会使用php的shuffle($array);.

但是,我的问题是我从字典中生成一个随机单词(我知道该怎么做并且正在工作),然后将这些字母随机地变成一个字谜.

所以基本上 - 这个词randomadrmon或类似的东西,但它会随机抽取单词中的字母.

我怎么能在PHP中这样做?

php random words shuffle anagram

1
推荐指数
1
解决办法
1411
查看次数

Anagrams Code Kata,Ruby Solution非常慢

我最近一直在玩Ruby,我刚从http://codekata.pragprog.com完成了Anagrams Code Kata .

该解决方案是测试驱动的,并利用独特的素因子化定理,但它似乎运行得非常慢.就45k文件而言,到目前为止它已经运行了大约10分钟.任何人都可以给我任何关于提高代码性能的指示吗?

class AnagramFinder
def initialize
    @words = self.LoadWordsFromFile("dict45k.txt")
end

def OutputAnagrams
    hash = self.CalculatePrimeValueHash

    @words.each_index{|i|
        word = @words[i]
        wordvalue = hash[i]
        matches = hash.select{|key,value| value == wordvalue}
        if(matches.length > 1)
            puts("--------------")
            matches.each{|key,value|
                puts(@words[key])
            }
        end         
    }

end

def CalculatePrimeValueHash     
    hash = Hash.new
    @words.each_index{|i|
        word = @words[i]
        value = self.CalculatePrimeWordValue(word)
        hash[i] = value
    }

    hash
end

def CalculatePrimeWordValue(word)
    total = 1
    hash = self.GetPrimeAlphabetHash
    word.downcase.each_char {|c|
        value = hash[c]
        total = total * value
    } …
Run Code Online (Sandbox Code Playgroud)

ruby algorithm performance anagram

1
推荐指数
1
解决办法
737
查看次数

解决anagram时的内存错误

我想解决下面的问题:

anagram是一种文字游戏,是重新排列单词或短语的字母以产生新单词或短语的结果,使用所有原始字母恰好一次; 例如,orchestra = carthorse.使用http://www.puzzlers.org/pub/wordlists/unixdict.txt中的单词列表,编写一个程序,查找共享包含最多单词的相同字符的单词集.

即使只有1000字节的文件大小,它也会失败.每次创建新列表时,为什么Python会将旧列表保留在内存中?我收到以下错误.

l=list(map(''.join, itertools.permutations(i)))
Run Code Online (Sandbox Code Playgroud)

给我:

MemoryError
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

import itertools
def anagram():
    f=open('unixdict.txt')
    f2=open('result_anagram.txt','w')
    words = f.read(1000).split('\n')
    for i in words:
        l=[]
        l=list(map(''.join, itertools.permutations(i)))
        l.remove(i)
        for anagram in l:
            if l==i:
                f2.write(i + "\n")
    return True

anagram()
Run Code Online (Sandbox Code Playgroud)

根据建议将上述代码更改为.但仍然得到内存错误.

import itertools

def anagram():
    f=open('unixdict.txt')
    f2=open('result_anagram.txt','w')
    words = set(line.rstrip('\n') for line in f)
    for i in words:
        l= map(''.join, itertools.permutations(i))
        l =(x for x in l if x!=i)
        for anagram in l:
            if anagram in words:
                f2.write(i …
Run Code Online (Sandbox Code Playgroud)

python memory anagram

1
推荐指数
1
解决办法
446
查看次数

char数组如何用于识别字谜?

我正在尝试编写一个anagram程序,所以我找到了以下示例.但是我无法弄清楚这一行,first[a[i]-'a']++; 在这里增加这个char数组的值有什么意义呢?

#include <stdio.h>
int check_anagram(char a[], char b[]){
   int first[26] = {0}, second[26] = {0}, i = 0;

   while (a[i] != '\0'){
      first[a[i]-'a']++;   //  ??????????
      i++;
   }
   i = 0;
   while (b[i] != '\0'){
      second[b[i]-'a']++;
      i++;
   }
   for (i = 0; i < 26; i++){
      if (first[i] != second[i])
         return 0;
   }
   return 1;
}

int main(){
   char a[100], b[100];
   int flag;

   printf("Enter first string\n");
   gets(a);
   printf("Enter second string\n");
   gets(b);

   flag = check_anagram(a, b);
   if (flag == 1) …
Run Code Online (Sandbox Code Playgroud)

c anagram

1
推荐指数
1
解决办法
164
查看次数

如何找到 2 个字符串的字谜

我编写了一个 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)

java string anagram

1
推荐指数
1
解决办法
2527
查看次数

Java Anagram耗尽内存

我正在努力解决古老的anagram问题.感谢那里的许多教程,我能够遍历一组字符串,递归地找到所有排列,然后将它们与英语单词列表进行比较.我发现的问题是,在大约三个单词(通常是"变态"之类的东西)之后,我得到一个OutOfMemory错误.我尝试将我的批次分成小集,因为它似乎是消耗我所有记忆的递归部分.但即便只是"变态"锁定它......

在这里,我将文件中的单词读入List

Scanner scanner = new Scanner(resource.getInputStream());
   while (scanner.hasNext()) {
       String s = scanner.nextLine();
        uniqueWords.add(s.toLowerCase());
   }
Run Code Online (Sandbox Code Playgroud)

现在我将它们分成更小的集合并调用类来生成字谜:

List<List<String>> subSets = Lists.partition(new ArrayList(uniqueWords), SET_SIZE);

for (List<String> set: subSets) {
      // tried created as class attribute & injection, no difference 
      AnagramGenerator anagramGenerator = new AnagramGenerator();
      List<Word> anagrams = anagramGenerator.createWordList(set);
      wordsRepository.save(anagrams);
      LOGGER.info("Inserted {} records into the database", anagrams.size());
 }
Run Code Online (Sandbox Code Playgroud)

最后我的发电机:

public class AnagramGenerator {

private Map<String, List<String>> map = new Hashtable<>();
public List<Word> createWordList(List<String> dictionary) {

   buildAnagrams(dictionary);

   List<Word> words = new ArrayList<>();
   for …
Run Code Online (Sandbox Code Playgroud)

java anagram

1
推荐指数
1
解决办法
182
查看次数

标签 统计

anagram ×10

string ×4

algorithm ×2

c++ ×2

java ×2

c ×1

c# ×1

char ×1

javascript ×1

jquery ×1

memory ×1

performance ×1

php ×1

python ×1

random ×1

ruby ×1

shuffle ×1

similarity ×1

sorting ×1

words ×1