# 算法题：检查两个字符串是否互为字谜

2021年4月18日19:07:38 发表评论 878 次浏览

1. 对两个字符串进行排序
2. 比较排序的字符串

## C ++

``````//C++ program to check whether two strings are anagrams
//of each other
#include <bits/stdc++.h>
using namespace std;

/* function to check whether two strings are anagram of
each other */
bool areAnagram(string str1, string str2)
{
//Get lengths of both strings
int n1 = str1.length();
int n2 = str2.length();

//If length of both strings is not same, then they
//cannot be anagram
if (n1 != n2)
return false ;

//Sort both the strings
sort(str1.begin(), str1.end());
sort(str2.begin(), str2.end());

//Compare sorted strings
for ( int i = 0; i <n1; i++)
if (str1[i] != str2[i])
return false ;

return true ;
}

//Driver code
int main()
{
string str1 = "test" ;
string str2 = "ttew" ;

//Function Call
if (areAnagram(str1, str2))
cout <<"The two strings are anagram of each other" ;
else
cout <<"The two strings are not anagram of each "
"other" ;

return 0;
}``````

## Java

``````//JAVA program to check whether two strings
//are anagrams of each other
import java.io.*;
import java.util.Arrays;
import java.util.Collections;

class GFG {

/* function to check whether two strings are
anagram of each other */
static boolean areAnagram( char [] str1, char [] str2)
{
//Get lenghts of both strings
int n1 = str1.length;
int n2 = str2.length;

//If length of both strings is not same, //then they cannot be anagram
if (n1 != n2)
return false ;

//Sort both strings
Arrays.sort(str1);
Arrays.sort(str2);

//Compare sorted strings
for ( int i = 0 ; i <n1; i++)
if (str1[i] != str2[i])
return false ;

return true ;
}

/* Driver Code*/
public static void main(String args[])
{
char str1[] = { 't' , 'e' , 's' , 't' };
char str2[] = { 't' , 't' , 'e' , 'w' };

//Function Call
if (areAnagram(str1, str2))
System.out.println( "The two strings are"
+ " anagram of each other" );
else
System.out.println( "The two strings are not"
+ " anagram of each other" );
}
}

//This code is contributed by Nikita Tiwari.``````

## python

``````# Python program to check whether two strings are
# anagrams of each other

# function to check whether two strings are anagram
# of each other

def areAnagram(str1, str2):
# Get lengths of both strings
n1 = len (str1)
n2 = len (str2)

# If lenght of both strings is not same, then
# they cannot be anagram
if n1 ! = n2:
return 0

# Sort both strings
str1 = sorted (str1)
str2 = sorted (str2)

# Compare sorted strings
for i in range ( 0 , n1):
if str1[i] ! = str2[i]:
return 0

return 1

# Driver code
str1 = "test"
str2 = "ttew"

# Function Call
if areAnagram(str1, str2):
print ( "The two strings are anagram of each other" )
else :
print ( "The two strings are not anagram of each other" )

# This code is contributed by Bhavya Jain``````

## C#

``````//C# program to check whether two
//strings are anagrams of each other
using System;
using System.Collections;
class GFG {

/* function to check whether two
strings are anagram of each other */
public static bool areAnagram(ArrayList str1, ArrayList str2)
{
//Get lenghts of both strings
int n1 = str1.Count;
int n2 = str2.Count;

//If length of both strings is not
//same, then they cannot be anagram
if (n1 != n2) {
return false ;
}

//Sort both strings
str1.Sort();
str2.Sort();

//Compare sorted strings
for ( int i = 0; i <n1; i++) {
if (str1[i] != str2[i]) {
return false ;
}
}

return true ;
}

//Driver Code
public static void Main( string [] args)
{
//create and initalize new ArrayList
ArrayList str1 = new ArrayList();
//create and initalize new ArrayList
ArrayList str2 = new ArrayList();

//Function call
if (areAnagram(str1, str2)) {
Console.WriteLine( "The two strings are"
+ " anagram of each other" );
}
else {
Console.WriteLine( "The two strings are not"
+ " anagram of each other" );
}
}
}

//This code is contributed by Shrikant13``````

``The two strings are not anagram of each other``

1. 为两个字符串创建大小为256的计数数组。将计数数组中的所有值初始化为0。
2. 遍历两个字符串的每个字符, 并递增相应计数数组中的字符计数。
3. 比较计数数组。如果两个计数数组相同, 则返回true。

## C ++

``````//C++ program to check if two strings
//are anagrams of each other
#include <bits/stdc++.h>
using namespace std;
#define NO_OF_CHARS 256

/* function to check whether two strings are anagram of
each other */
bool areAnagram( char * str1, char * str2)
{
//Create 2 count arrays and initialize all values as 0
int count1[NO_OF_CHARS] = { 0 };
int count2[NO_OF_CHARS] = { 0 };
int i;

//For each character in input strings, increment count
//in the corresponding count array
for (i = 0; str1[i] && str2[i]; i++) {
count1[str1[i]]++;
count2[str2[i]]++;
}

//If both strings are of different length. Removing
//this condition will make the program fail for strings
//like "aaca" and "aca"
if (str1[i] || str2[i])
return false ;

//Compare count arrays
for (i = 0; i <NO_OF_CHARS; i++)
if (count1[i] != count2[i])
return false ;

return true ;
}

/* Driver code*/
int main()
{
char str1[] = "lsbin" ;
char str2[] = "forgeeksgeeks" ;

//Function Call
if (areAnagram(str1, str2))
cout <<"The two strings are anagram of each other" ;
else
cout <<"The two strings are not anagram of each "
"other" ;

return 0;
}

//This is code is contributed by rathbhupendra``````

## C

``````//C program to check if two strings
//are anagrams of each other
#include <stdio.h>
#define NO_OF_CHARS 256

/* function to check whether two strings are anagram of
each other */
bool areAnagram( char * str1, char * str2)
{
//Create 2 count arrays and initialize all values as 0
int count1[NO_OF_CHARS] = { 0 };
int count2[NO_OF_CHARS] = { 0 };
int i;

//For each character in input strings, increment count
//in the corresponding count array
for (i = 0; str1[i] && str2[i]; i++) {
count1[str1[i]]++;
count2[str2[i]]++;
}

//If both strings are of different length. Removing
//this condition will make the program fail for strings
//like "aaca" and "aca"
if (str1[i] || str2[i])
return false ;

//Compare count arrays
for (i = 0; i <NO_OF_CHARS; i++)
if (count1[i] != count2[i])
return false ;

return true ;
}

/* Driver code*/
int main()
{
char str1[] = "lsbin" ;
char str2[] = "forgeeksgeeks" ;

//Function Call
if (areAnagram(str1, str2))
printf ( "The two strings are anagram of each other" );
else
printf ( "The two strings are not anagram of each "
"other" );

return 0;
}``````

## Java

``````//JAVA program to check if two strings
//are anagrams of each other
import java.io.*;
import java.util.*;

class GFG {

static int NO_OF_CHARS = 256 ;

/* function to check whether two strings
are anagram of each other */
static boolean areAnagram( char str1[], char str2[])
{
//Create 2 count arrays and initialize
//all values as 0
int count1[] = new int [NO_OF_CHARS];
Arrays.fill(count1, 0 );
int count2[] = new int [NO_OF_CHARS];
Arrays.fill(count2, 0 );
int i;

//For each character in input strings, //increment count in the corresponding
//count array
for (i = 0 ; i <str1.length && i <str2.length;
i++) {
count1[str1[i]]++;
count2[str2[i]]++;
}

//If both strings are of different length.
//Removing this condition will make the program
//fail for strings like "aaca" and "aca"
if (str1.length != str2.length)
return false ;

//Compare count arrays
for (i = 0 ; i <NO_OF_CHARS; i++)
if (count1[i] != count2[i])
return false ;

return true ;
}

/* Driver code*/
public static void main(String args[])
{
char str1[] = ( "lsbin" ).toCharArray();
char str2[] = ( "forgeeksgeeks" ).toCharArray();

//Function call
if (areAnagram(str1, str2))
System.out.println( "The two strings are"
+ "anagram of each other" );
else
System.out.println( "The two strings are not"
+ " anagram of each other" );
}
}

//This code is contributed by Nikita Tiwari.``````

## python

``````# Python program to check if two strings are anagrams of
# each other
NO_OF_CHARS = 256

# Function to check whether two strings are anagram of
# each other

def areAnagram(str1, str2):

# Create two count arrays and initialize all values as 0
count1 = [ 0 ] * NO_OF_CHARS
count2 = [ 0 ] * NO_OF_CHARS

# For each character in input strings, increment count
# in the corresponding count array
for i in str1:
count1[ ord (i)] + = 1

for i in str2:
count2[ ord (i)] + = 1

# If both strings are of different length. Removing this
# condition will make the program fail for strings like
# "aaca" and "aca"
if len (str1) ! = len (str2):
return 0

# Compare count arrays
for i in xrange (NO_OF_CHARS):
if count1[i] ! = count2[i]:
return 0

return 1

# Driver code
str1 = "lsbin"
str2 = "forgeeksgeeks"

# Function call
if areAnagram(str1, str2):
print "The two strings are anagram of each other"
else :
print "The two strings are not anagram of each other"

# This code is contributed by Bhavya Jain``````

## C#

``````//C# program to check if two strings
//are anagrams of each other

using System;

public class GFG {

static int NO_OF_CHARS = 256;

/* function to check whether two strings
are anagram of each other */
static bool areAnagram( char [] str1, char [] str2)
{
//Create 2 count arrays and initialize
//all values as 0
int [] count1 = new int [NO_OF_CHARS];
int [] count2 = new int [NO_OF_CHARS];
int i;

//For each character in input strings, //increment count in the corresponding
//count array
for (i = 0; i <str1.Length && i <str2.Length;
i++) {
count1[str1[i]]++;
count2[str2[i]]++;
}

//If both strings are of different length.
//Removing this condition will make the program
//fail for strings like "aaca" and "aca"
if (str1.Length != str2.Length)
return false ;

//Compare count arrays
for (i = 0; i <NO_OF_CHARS; i++)
if (count1[i] != count2[i])
return false ;

return true ;
}

/* Driver code*/
public static void Main()
{
char [] str1 = ( "lsbin" ).ToCharArray();
char [] str2 = ( "forgeeksgeeks" ).ToCharArray();

//Function Call
if (areAnagram(str1, str2))
Console.WriteLine( "The two strings are"
+ "anagram of each other" );
else
Console.WriteLine( "The two strings are not"
+ " anagram of each other" );
}
}

//This code contributed by 29AjayKumar``````

``The two strings are anagram of each other``

## CPP

``````//C++ program to check if two strings
//are anagrams of each other
#include <bits/stdc++.h>
using namespace std;
#define NO_OF_CHARS 256

bool areAnagram( char * str1, char * str2)
{
//Create a count array and initialize all values as 0
int count[NO_OF_CHARS] = { 0 };
int i;

//For each character in input strings, increment count
//in the corresponding count array
for (i = 0; str1[i] && str2[i]; i++) {
count[str1[i]]++;
count[str2[i]]--;
}

//If both strings are of different length. Removing
//this condition will make the program fail for strings
//like "aaca" and "aca"
if (str1[i] || str2[i])
return false ;

//See if there is any non-zero value in count array
for (i = 0; i <NO_OF_CHARS; i++)
if (count[i])
return false ;
return true ;
}

//Driver code
int main()
{
char str1[] = "lsbin" ;
char str2[] = "forgeeksgeeks" ;

//Function call
if (areAnagram(str1, str2))
cout <<"The two strings are anagram of each other" ;
else
cout <<"The two strings are not anagram of each "
"other" ;

return 0;
}``````

1. 我们将变量数count初始化为0。
2. 然后, 我们取第一个字符串的所有字符的总和, 然后从第二个字符串减小所有字符的值。
3. 如果Count值最终为0, 即在执行任何操作之前, 则为anagram, 否则为0。

## C ++

``````//C++ program to check if two strings
//are anagrams of each other
#include <bits/stdc++.h>
using namespace std;

bool isAnagram(string c, string d)
{
if (c.size() != d.size())
return false ;
int count = 0;

//Take sum of all characters of first String
for ( int i = 0; i <c.size(); i++) {
count += c[i];
}

//Subtract the Value of all the characters of second
//String
for ( int i = 0; i <d.size(); i++) {
count -= d[i];
}

//If Count = 0 then they are anagram
//If count> 0 or count <0 then they are not anagram
return (count == 0);
}

//Driver code
int main()
{
char str1[] = "lsbin" ;
char str2[] = "forgeeksgeeks" ;

//Function call
if (isAnagram(str1, str2))
cout <<"The two strings are anagram of each other" ;
else
cout <<"The two strings are not anagram of each "
"other" ;

return 0;
}``````

``The two strings are anagram of each other``