📜  检查给定的字符串是否与在镜子中的反射相同

📅  最后修改于: 2021-04-26 10:59:45             🧑  作者: Mango

给定一个仅包含大写英文字符的字符串S。任务是找出S是否与其在镜中的反射相同。

例子:

Input: str = "AMA"
Output: YES
AMA is same as its reflection in the mirror.

Input: str = "ZXZ"
Output: NO

方法:字符串显然必须是回文,但仅此还不够。字符串中的所有字符应对称,以使它们的反射也相同。对称字符是AHIMOTUVWXY

  • 将对称字符存储在unordered_set中。
  • 遍历字符串,并检查是否有任何非对称的存在的字符串中的字符。如果是,则返回false。
  • 否则检查字符串是否为回文。如果字符串是回文,则返回true,否则返回false。

下面是上述方法的实现:

C++
// C++ implementation of the 
// above approach
  
#include 
using namespace std;
  
// Function to check reflection
bool isReflectionEqual(string s)
{
    // Symmetric characters
    unordered_set symmetric = { 'A', 'H', 'I', 'M',
                        'O', 'T', 'U', 'V', 'W', 'X', 'Y' };
  
    int n = s.length();
  
    for (int i = 0; i < n; i++)
        // If any non-symmetric character is
        // present, the answer is NO
        if (symmetric.find(s[i]) == symmetric.end())
            return false;
  
    string rev = s;
    reverse(rev.begin(), rev.end());
  
    // Check if the string is a palindrome
    if (rev == s)
        return true;
    else
        return false;
}
  
// Driver code
int main()
{
    string s = "MYTYM";
    if (isReflectionEqual(s))
        cout << "YES";
    else
        cout << "NO";
}


Java
// Java implementation of above approach
import java.util.*;
  
class GFG 
{
  
    static String Reverse(String s)
    {
        char[] charArray = s.toCharArray();
        reverse(charArray, 0, charArray.length - 1);
        return new String(charArray);
    }
  
    // Function to check reflection 
    static boolean isReflectionEqual(String s) 
    {
        HashSet symmetric = new HashSet<>();
  
        // Symmetric characters 
        symmetric.add('A');
        symmetric.add('H');
        symmetric.add('I');
        symmetric.add('M');
        symmetric.add('O');
        symmetric.add('T');
        symmetric.add('U');
        symmetric.add('V');
        symmetric.add('W');
        symmetric.add('X');
        symmetric.add('Y');
  
        int n = s.length();
  
        // If any non-symmetric character is
        for (int i = 0; i < n; i++) 
          
        // present, the answer is NO 
        {
            if (symmetric.contains(s.charAt(i)) == false) 
            {
                return false;
            }
        }
  
        String rev = s;
        s = Reverse(s);
  
        // Check if the String is a palindrome 
        if (rev.equals(s)) 
        {
            return true;
        } else {
            return false;
        }
    }
      
    // Reverse the letters of the word 
    static void reverse(char str[], int start, int end) 
    {
  
        // Temporary variable to store character 
        char temp;
        while (start <= end)
        {
            // Swapping the first and last character 
            temp = str[start];
            str[start] = str[end];
            str[end] = temp;
            start++;
            end--;
        }
    }
      
    // Driver code 
    public static void main(String[] args) 
    {
        String s = "MYTYM";
        if (isReflectionEqual(s))
        {
            System.out.println("YES");
        } 
        else 
        {
            System.out.println("NO");
        }
    }
}
  
// This code contributed by Rajput-Ji


Python3
# Python3 implementation of the 
# above approach
  
# Function to check reflection
def isReflectionEqual(s):
  
    # Symmetric characters
    symmetric = dict()
  
    str1 = "AHIMOTUVWXY"
  
    for i in str1:
        symmetric[i] = 1
  
    n = len(s)
  
    for i in range(n):
          
        # If any non-symmetric character 
        # is present, the answer is NO
        if (symmetric[s[i]] == 0):
            return False
  
    rev = s[::-1]
  
    # Check if the is a palindrome
    if (rev == s):
        return True
    else:
        return False
  
# Driver Code
s = "MYTYM"
if (isReflectionEqual(s)):
    print("YES")
else:
    print("NO")
  
# This code is contributed by Mohit Kumar


C#
// C# implementation of the above approach 
using System;
using System.Collections.Generic ;
  
class GFG
{
  
    static string Reverse( string s )
    {
        char[] charArray = s.ToCharArray();
        Array.Reverse( charArray );
        return new string( charArray );
    }
      
    // Function to check reflection 
    static bool isReflectionEqual(string s) 
    { 
        HashSet symmetric = new HashSet();
          
        // Symmetric characters 
        symmetric.Add('A');
        symmetric.Add('H');
        symmetric.Add('I');
        symmetric.Add('M');
        symmetric.Add('O');
        symmetric.Add('T');
        symmetric.Add('U');
        symmetric.Add('V');
        symmetric.Add('W');
        symmetric.Add('X');
        symmetric.Add('Y');
      
        int n = s.Length; 
      
        for (int i = 0; i < n; i++) 
          
            // If any non-symmetric character is 
            // present, the answer is NO 
            if (symmetric.Contains(s[i]) == false) 
                return false; 
      
        string rev = s; 
        s = Reverse(s); 
      
        // Check if the string is a palindrome 
        if (rev == s) 
            return true; 
        else
            return false; 
    } 
  
    // Driver code 
    static public void Main() 
    { 
        string s = "MYTYM"; 
        if (isReflectionEqual(s)) 
            Console.WriteLine("YES"); 
        else
            Console.WriteLine("NO"); 
    } 
}
  
// This code is contributed by Ryuga


输出:
YES

时间复杂度: O(N)