标签: anagram

必须包含字符串中所有字符的正则表达式匹配

我确信这已经被问到并得到了回答,但老实说,在搜索了一下并阅读Regex Tutorial之后,我找不到我的答案.我要做的是匹配一个字符串,其长度与另一个字符串相同.例如,字符串"abcde"将匹配"edcba"但不匹配"abcdf""aabbc""abc".

这是我最接近的测试代码,它使用了一个字符类,但是我无法弄清楚的是如何在匹配开始时让regex基本上遍历类中的每个字符串:

$string = 'abcde';
$array  = array('edcba','eeeee','fghij','fedcba','qqq','cbaed','cba');
foreach ($array as $match)
{
    if (preg_match("/[$string]/i",$match))
        echo "TRUE  -> $match";
    else 
        echo "FALSE -> $match";
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

TRUE  -> edcba
TRUE  -> eeeee
FALSE -> fghij
TRUE  -> fedcba
FALSE -> qqq
TRUE  -> cbaed
TRUE  -> cba 
Run Code Online (Sandbox Code Playgroud)

当我真正想要的是:

TRUE  -> edcba 
FALSE -> eeeee  
FALSE -> fghij  
FALSE -> fedcba 
FALSE -> qqq    
TRUE  -> cbaed  
FALSE …
Run Code Online (Sandbox Code Playgroud)

php regex string string-comparison anagram

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

Ruby Anagram使用String#sum

我已经解决了一个问题,要求你编写一个方法来确定所提供的数组中的字是字谜,并将字谜分组到输出中的子数组中.

我已经使用看似典型的方式来解决它,通过对单词进行排序并将它们分组为基于排序字符的哈希.

当我最初开始寻找一种方法时,我注意到String#sum存在将每个角色的序数加在一起.

我想尝试一些方法来确定一个基于使用的字谜sum.例如,"汽车"和"疤痕"是字谜,它们sum是425.

给定%w[cars scar for four creams scream racs]输出的预期输出(我已经使用哈希解决方案得到)是:[[cars, scar, racs],[for],[four],[creams,scream]].

看起来好像做了这样的事情:

input.each_with_object(Hash.new []) do |word, hash|
  hash[word.sum] += [word]
end
Run Code Online (Sandbox Code Playgroud)

是一种方法,它给你一个哈希,其中键"425"的值是['cars','racs','scar'].我认为我缺少的是将其转换为预期的输出格式.

ruby anagram

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

使用Method在ArrayLists中循环

在很多帮助下,我开发了一种制作字谜的方法,然后将它们添加到一个ArrayList.

public void f(String s, String anagram, ArrayList<String> array)
{
    if(s.length() == 0)
    {
        array.add(anagram);
        return;
    }
    for(int i = 0 ; i < s.length() ; i++)
    {
        char l = s.charAt(i);
        anagram = anagram + l;
        s = s.substring(0, i) + s.substring(i+l, s.length());
        f(s,anagram,array);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试使用此函数ArrayList在循环中将s添加String到一个ArrayList到另一个时,我得到一个错误,说我不能使用void,并且该方法f()是无效的.

        List<String> Lists = new ArrayList<String>(); //makes new array list
        for(String List : words)
        { //takes values from old array list
            List.trim();
            Lists.add(f(List,"",new …
Run Code Online (Sandbox Code Playgroud)

java methods arraylist multidimensional-array anagram

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

使用PHP写一个anagram函数?

使用PHP写一个anagram函数?它应该处理不同的短语并返回布尔结果.

用法:

$pharse1 = 'ball';
$pharse2 = 'lbal';
if(is_anagram($pharse1,$pharse2)){
  echo $pharse1 .' & '. $pharse2 . ' are anagram';
}else{
  echo $pharse1 .' & '. $pharse2 . ' not anagram';
}
Run Code Online (Sandbox Code Playgroud)

php anagram

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

检查两个字符串的排列

我确实有一个问题,我正在尝试使用最有效的方法来解决它.

"给定两个字符串,找出两个字符串是否相互排列."

我知道直截了当的方法(即排序两个字符串)等.

我想看看我的方法是否适用于所有情况,我不确定,所以我需要你的意见和你的意见.

def CheckPermutaionsBySumUp(firstString, secondString):
   if (len(firstString) != len(secondString)):
      return False

   firstStringCount = 0
   secondStringCount = 0

   for char in firstString:
      firstStringCount += ord(char)

   for char in secondString:
      secondStringCount += ord(char)

   if firstStringCount == secondStringCount:
      return True

   return False
Run Code Online (Sandbox Code Playgroud)

所以我的方法是,我确实有一个有用的约束,并且如果两个字符串的长度不同,那么这两个字符串不是彼此的排列.

然后,知道每个字符都有唯一的数字表示,如果我使用ord函数总结每个字符串的每个字母的数量,我可以比较两个总和并找出这两个字符串是否是排列.在我看来,这个解决方案不仅仅是O(n),而且比使用数组和数据结构更节省空间.

我唯一担心的是,有两个字符串,长度相同,字符不同,有相同的总和吗?

python permutation anagram

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

为什么在anagram映射中O(n ^ 2)比O(n)更快?

给出两个列表A和B,B是A的字谜.B是A的字谜A是通过随机化A中元素的顺序来制作的.我们想要找到从A到B的索引映射P. P [i] = j表示A中的第i个元素出现在索引j处的B中.这些列表A和B可能包含重复项.

例如,给定

A = [12,28,46,32,50] B = [50,12,32,46,28]我们应该返回[1,4,3,2,0]

我的解决方案是O(n ^ 2)

public int[] anagramMappings(int[] A, int[] B) {
    int[] result = new int[100];
    int count = 0;
    for (int i = 0; i < A.length; i++) {
        for (int j = 0; j < B.length; j++) {
            if (A[i] == B[j]) {
                result[i] = j;
                count++;
                break;
            }
        }
    }
    int[] tempArray = new int[count];
    for (int i = 0; i < count; i++) {
        tempArray[i] …
Run Code Online (Sandbox Code Playgroud)

algorithm big-o anagram

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

字谜 - 如何通过以下两个测试用例

这是我的代码,两个字符串是否是字谜

static boolean isAnagram(String a, String b) {
    if (a.length() != b.length()) return false;
    a = a.toLowerCase();
    b = b.toLowerCase();
    int m1=0;
    for(int i=0;i<a.length();i++){
        m1 += (int)a.charAt(i);
        m1 -= (int)b.charAt(i);

    }
        return m1==0;
}
Run Code Online (Sandbox Code Playgroud)

我的代码在两个测试用例中失败了

  • 案例1:String a="xyzw";String b="xyxy";
  • 案例2:String a="bbcc";String b="dabc";

谁能帮助我通过上述两个案件?

java string char anagram

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

如何找到所有可能的字谜而无需递归?

我正在尝试构建一个程序,以查找单词的所有字谜。这将采用“ 123”并将其变成“ 132”,“ 213”,“ 231”,“ 312”,“ 321”(不相关的顺序)。我已经看过如何获取字符串的所有字谜的文章,但我希望使用普通循环而不是函数递归来完成。到目前为止,我的字谜功能是这样的:

void inline decodeAnagram(string anagram) {
    srand(time(0)); // Get truly random numbers
    while (amount != possibilities) {
        bool failedCheck = false;
        // Create array from letters
        char splitAnagram[1024];
        strcpy_s(splitAnagram, anagram.c_str());

        // Main loop
        for (int i = anagram.length() - 1; i > 0; i--) {
            int index = rand() % i + 1;
            char letter = splitAnagram[index];
            splitAnagram[index] = splitAnagram[i];
            splitAnagram[i] = letter;
        }

        // Loop to get valid array parts back …
Run Code Online (Sandbox Code Playgroud)

c++ anagram

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

Java 8 Streams - 如何比较元素?

我想.txt使用 Java Stream在文件中查找字谜。这是我所拥有的:

try (InputStream is = new URL("http://wiki.puzzlers.org/pub/wordlists/unixdict.txt").openConnection().getInputStream();
     BufferedReader reader = new BufferedReader(new InputStreamReader(is));
     Stream<String> stream = reader.lines()) {
Run Code Online (Sandbox Code Playgroud)

以及字谜的方法:

public boolean isAnagram(String firstWord, String secondWord) {
    char[] word1 = firstWord.replaceAll("[\\s]", "").toCharArray();
    char[] word2 = secondWord.replaceAll("[\\s]", "").toCharArray();
    Arrays.sort(word1);
    Arrays.sort(word2);
    return Arrays.equals(word1, word2);
}
Run Code Online (Sandbox Code Playgroud)

如何使用 Java 8 Stream 检查 unixdict.txt 中的单词是否是字谜?有没有办法将一个词与流中的所有词进行比较?

java inputstream fileinputstream anagram java-stream

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

检查需要删除多少个字符才能在 Python 中制作字谜

我写了 python 代码来检查需要从两个字符串中删除多少个字符才能使它们成为彼此的字谜。

这是问题陈述“给定两个字符串,并且 ,它们的长度可能相同,也可能不同,请确定制作和字谜所需的最少字符删除次数。可以从任何一个字符串中删除任何字符”

def makeAnagram(a, b):
    # Write your code here
    ac=0 # tocount the no of occurences of chracter in a
    bc=0    # tocount the no of occurences of chracter in b
    p=False     #used to store result of whether an element is in that string
    c=0        #count of characters to be deleted to make these two strings anagrams
    t=[]        # list of previously checked chracters
    
    for x in a:
        if x in t == True:
            continue
        ac=a.count(x) …
Run Code Online (Sandbox Code Playgroud)

python anagram

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