首页 >Java >java教程 >Java 中的 Anagram 程序

Java 中的 Anagram 程序

PHPz
PHPz原创
2024-08-30 16:26:59820浏览

Anagram 是通过重新排列或重新排列不同单词的字母而形成的单词;字谜词的要点是字母只能使用一次,并且不应在新单词中重复。 Anagram 是具有相同数量字母的单词。这里的计数很重要。 Java中的Anagram程序可以通过对两个字符串进行排序和比较来按上述方式使用。如果这些成功,则意味着该字符串是一个字谜。

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

算法:

让我们看一下从特定单词获取字谜词的算法。可以通过三种方式找到字谜词。我们将一一解释这三种方式。基本算法包括检查字符串的长度。一旦长度相同,就可以对其进行排序或计数并检查字谜。

Java 中的 Anagram 程序示例

对于给定的字符串,我们可以做的第一件事就是对两个要验证的给定字符串进行排序,以验证它们是否是字谜词。排序完成后,就可以按照排序后的顺序进行比较。该方法的时间复杂度为O(n Logn)。 Java 代码可以写成如下:

示例#1

代码:

// JAVA program to validate if two strings are anagrams
import java.io.*;
import java.util.Arrays;
import java.util.Collections;
class Main {
/* Below is a function which checks if the strings are anagram */
static boolean checkAnagram(char[] strana1, char[] strana2)
{
// Finding lengths of strings
int len1 = strana1.length;
int len2 = strana2.length;
// If lengths do not match then they cannot be anagrams
if (len1 != len2)
return false;
// Sort both strings
Arrays.sort(strana1);
Arrays.sort(strana2);
// Comparing the strings which are sorted earlier
for (int i = 0; i < len1; i++)
if (strana1[i] != strana2[i])
return false;
return true;
}
/* Main program to test Anagram*/
public static void main (String args[])
{
char strana1[] = { 't', 'e', 's', 't' };
char strana2[] = { 't', 't', 'e', 'w' };
if (checkAnagram(strana1, strana2))
System.out.println("The strings to be checked are" + " anagram of each other");
else
System.out.println("The strings to be checked are not" + " anagram of each other");
}
}

上面的程序首先检查两个给定字符串的长度。如果字符串的长度不同,则返回 false。只有当两个字符串的长度相同时,程序才会继续进行。通过使用数组排序功能,它将对两个数组中的字符串进行排序。一旦对两个字符串使用数组排序函数,就会对字符串进行比较,并在循环中比较每个字母。如果 for 循环成功并且两个字符串中的所有字母都相同,则输出将是一个字谜词。即使有一个字母不匹配,也会返回 false。这里的主程序检查字符串并根据 checkAnagram 函数返回的结果显示该字符串是否是字谜词。

输出:

Java 中的 Anagram 程序

如果我们将输入更改为“t”、“t”、“e”、“s”而不是 w,输出将如下所示。

输出:

Java 中的 Anagram 程序

示例#2

当验证的字符串较小时可以使用此方法。该方法考虑存储的字符为8位,可能可以存储256个字符。在该方法中,可以先使用大小为256的count数组对字符串进行计数,并将count数组中所有需要的值初始化为0。遍历该数组,并在遍历的同时递增count。完成此操作后,您可以比较计数数组。如果计数相同,则返回结果为 true。

代码:

import java.io.*;
import java.util.*;
class ANA {
static int NO_CHARS = 256;
/* Below is a function which checks if the strings are anagram */
static boolean isAnagram(char strana1[], char strana2[])
{
// Here we create two arrays and initialize it to 0
int cnt1[] = new int[NO_CHARS];
Arrays.fill(cnt1, 0);
int cnt2[] = new int[NO_CHARS];
Arrays.fill(cnt2, 0);
int i;
// For every character in input strings, increment the count
for (i = 0; i < strana1.length && i < strana2.length;
i++) {
cnt1[strana1[i]]++;
cnt2[strana2[i]]++;
}
// Checking If both strings are of different length
if (strana1.length != strana2.length)
return false;
// Compare count arrays
for (i = 0; i < NO_CHARS; i++)
if (cnt1[i] != cnt2[i])
return false;
return true;
}
/* Main program to test to check if string is Anagram or not*/
public static void main(String args[])
{
char strana1[] = ("silent").toCharArray();
char strana2[] = ("lisent").toCharArray();
if (isAnagram(strana1, strana2))
System.out.println("The strings to be checked are" + " anagram of each other");
else
System.out.println("The strings to be checked are not" + " anagram of each other");
}
}

输出:

Java 中的 Anagram 程序

示例#3

可以使用Java中的StringBuilder函数来检查Anagram。我们可以使用 deletechartAt() 方法来删​​除第二个字符串中出现的任何字符。

代码:

public class Main
{
static void findAnagram(String str1, String str2)
{
String copystr1 = str1.replaceAll( " ", "").toLowerCase();
String copystr2 = str2.replaceAll(" ", "").toLowerCase();
//Setting the initial status to true
boolean flag = true;
if(copystr1.length() != copystr2.length())
{
//If copystr1 and copystr2 do not have same length then set the flag to false
flag = false;
}
else
{
//changing copystr1 to char array
char[] str1Array = copystr1.toCharArray();
//Creating StringBuilder from copystr2
StringBuilder sb = new StringBuilder(copystr2);
//Validating if  each character of str1Array is present in string builder
for (char c : str1Array)
{
int index = sb.indexOf(""+c);
if (index != -1)
{
sb = sb.deleteCharAt(index);
}
else
{
//If each character is not present, setting flag to false and breaking the loop
flag = false;
break;
}
}
}
if(flag)
{
System.out.println(str1+" and "+str2+" are anagrams");
}
else
{
System.out.println(str1+" and "+str2+" are not anagrams");
}
}
public static void main(String[] args)
{
findAnagram("Silent", "Listen");
}
}

此处的程序使用该标志并使用字符串生成器模块来帮助删除多余的字符。

输出:

Java 中的 Anagram 程序

以上是Java 中的 Anagram 程序的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn