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 的长度)。
不过,对于这样的问题,有一个更好的解决方案:
String.toCharArray()为每个字符串取值