Проверить, совпадает ли данная строка с ее отражением в зеркале

Опубликовано: 14 Января, 2022

Дана строка S, содержащая только символы английского алфавита в верхнем регистре. Задача состоит в том, чтобы выяснить, совпадает ли S со своим отражением в зеркале.
Примеры:

 Ввод: str = "AMA"
Выход: ДА
АМА - это то же самое, что и отражение в зеркале.

Ввод: str = "ZXZ"
Выход: НЕТ
Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.

Подход: очевидно, что строка должна быть палиндромом, но этого недостаточно. Все символы в строке должны быть симметричными, чтобы их отражение было одинаковым. Симметричные символы - AHIMOTUVWXY .

  • Сохраните симметричные символы в unordered_set.
  • Пройдите по строке и проверьте, присутствует ли в строке какой-либо несимметричный символ. Если да, то верните false.
  • В противном случае проверьте, является ли строка палиндромом или нет. Если строка также является палиндромом, верните true, иначе верните false.

Below is the implementation of the above approach: 
 

C++

// C++ implementation of the
// above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check reflection
bool isReflectionEqual(string s)
{
    // Symmetric characters
    unordered_set<char> 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<Character> 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<char> symmetric = new HashSet<char>();
         
        // 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

Javascript

<script>
 
// JavaScript implementation of above approach
     
    function Reverse(s)
    {
        let charArray = s.split("");
        reverse(charArray, 0, charArray.length - 1);
        return charArray.join("");
    }
     
    // Function to check reflection
    function isReflectionEqual(s)
    {
        let symmetric = new Set();
   
        // 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");
   
        let n = s.length;
   
        // If any non-symmetric character is
        for (let i = 0; i < n; i++)
           
        // present, the answer is NO
        {
            if (symmetric.has(s[i]) == false)
            {
                return false;
            }
        }
   
        let rev = s;
        s = Reverse(s);
   
        // Check if the String is a palindrome
        if (rev==(s))
        {
            return true;
        } else {
            return false;
        }
    }
     
    // Reverse the letters of the word
    function reverse(str,start,end)
    {
        // Temporary variable to store character
        let temp;
        while (start <= end)
        {
            // Swapping the first and last character
            temp = str[start];
            str[start] = str[end];
            str[end] = temp;
            start++;
            end--;
        }
    }
     
    // Driver code
    let s = "MYTYM";
        if (isReflectionEqual(s))
        {
            document.write("YES");
        }
        else
        {
            document.write("NO");
        }
     
 
// This code is contributed by unknown2108
 
</script>
Output: 
YES

 

Сложность времени: O (N)

Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .

Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.

РЕКОМЕНДУЕМЫЕ СТАТЬИ