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

Nir*_*mal 1 java string anagram

我编写了一个 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 are anagrams of each other");

            }
            else
            {
                System.out.println("String 1 and String 2 are not anagrams of each other");
            }

        }

    }

}
Run Code Online (Sandbox Code Playgroud)

输出:

m
Arraylist value is [m]    
1  
a  
Arraylist value is [m, a]    
2   
r   
Arraylist value is [m, a, r]    
3  
y   
Arraylist value is [m, a, r, y]   
4   
Array value is [m, a, r, y]  
String 1 and String 2 are not anagrams of each other
Run Code Online (Sandbox Code Playgroud)

在这里,如果您看到所有字符都添加到数组列表中,但与字符串比较时,它显示的是输出,因为它们不是彼此的字谜。

请帮助我找到解决方案。

谢谢你,

小智 5

我认为您的解决方案仅适用于具有唯一字符的单词,并且时间复杂度将为 O(n^2) (其中 n - 是 String 的长度)。

不过,对于这样的问题,有一个更好的解决方案:

  1. String.toCharArray()为每个字符串取值
  2. 对这些数组进行排序
  3. 如果这些数组相等,那么你的单词就是字谜词