检查给定的字符串是否与其在镜子中的反射相同
原文:https://www . geeksforgeeks . org/check-如果给定字符串与其镜像中的反射相同/
给定一个只包含大写英文字符的字符串 S 。任务是发现 S 是否和它在镜子里的倒影一样。 例:
Input: str = "AMA"
Output: YES
AMA is same as its reflection in the mirror.
Input: str = "ZXZ"
Output: NO
方法:字符串显然必须是回文,但仅此还不够。字符串中的所有字符都应该是对称的,这样它们的反射也是相同的。对称字符为 AHIMOTUVWXY 。
- 将对称字符存储在无序集中。
- 遍历字符串并检查字符串中是否存在任何非对称字符。如果是,则返回 false。
- 否则检查字符串是否是回文。如果字符串也是回文,则返回 true,否则返回 false。
以下是上述方法的实现:
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
Python 3
# 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
java 描述语言
<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) T3】辅助空间: O(1)
版权属于:月萌API www.moonapi.com,转载请注明出处