செல்லுபடியாகும் அனகிராம்ஸ்


சிரமம் நிலை எளிதாக
அடிக்கடி கேட்கப்படுகிறது அமேசான் கோல்ட்மேன் சாக்ஸ் கூகிள் மைக்ரோசாப்ட் நாகரோ
அனக்ரம் ஹேஷிங்

“செல்லுபடியாகும் அனகிராம்ஸ்” சிக்கலில் நாங்கள் இரண்டைக் கொடுத்துள்ளோம் சரங்களை str1 மற்றும் str2. இரண்டு சரங்களும் அனகிராம்கள் இல்லையா என்பதைக் கண்டறியவும். அவர்கள் இருந்தால் பிறழ்கிளவிகளைக் உண்மைக்குத் திரும்புங்கள் தவறானவை.

உதாரணமாக

உள்ளீடு:

str1 = “abcbac”

str2 = “aabbcc”

வெளியீடு:

உண்மை

விளக்கம்:

Str2 இன் அனைத்து சொற்களையும் மறுசீரமைப்பதன் மூலம் str1 ஐ உருவாக்க முடியும் என்பதால் வெளியீடு இருக்கும் "உண்மை ”.

அல்காரிதம்

  1. இரண்டு சரத்தின் நீளத்தையும் கண்டறியவும்
  2. சரம் இரண்டையும் அகர வரிசைப்படி வரிசைப்படுத்தவும்
  3. சரம் இரண்டையும் ஒப்பிடுக
  4. சம வருமானம் என்றால் “உண்மை” வேறு திரும்ப “பொய்”

விளக்கம்

அனகிராம்கள் ஒரே வரிசையில் அமைக்கப்பட்டிருக்கின்றன, அதில் இரண்டு சரங்களும் ஒரே மாதிரியாக இருக்கும், அவற்றை மறுசீரமைத்த பின் ஒற்றை மற்றும் ஒரே வார்த்தையை உருவாக்குகின்றன.

எ.கா: அமைதியானது ஒரு வரிசையில் ஒழுங்கமைக்கப்பட்டு ஒரு வார்த்தையைக் கேட்கக்கூடிய வார்த்தையாகும், எனவே இரண்டு சொற்களும் ஒருவருக்கொருவர் அனகிராம்கள்.

கொடுக்கப்பட்ட சரங்கள் செல்லுபடியாகுமா என்பதைக் கண்டுபிடிப்பதே எங்கள் குறியீடு பிறழ்கிளவிகளைக் அல்லது இல்லை, எனவே முதலில் சரத்தின் நீளத்தைக் கண்டுபிடிப்பதே எங்கள் முக்கிய யோசனை, இரு சரங்களின் நீளமும் ஒத்ததாகக் காணப்பட்டால் மட்டுமே நாம் மேலும் நகர்கிறோம், இல்லையெனில் இல்லை, ஏனென்றால் சரங்களின் நீளம் இருந்தால் அனகிராம்களாக இருக்க முடியாது. ஒத்ததாக இல்லை. எனவே அங்கிருந்து, நாங்கள் பொய்யைத் திருப்புகிறோம்.

எங்கள் அடுத்த தர்க்கம் அவற்றை ஏறுவரிசையில் ஒழுங்கமைப்பதாகும், இதனால் ஒவ்வொரு எழுத்தும் வரிசையில் வரும், எனவே “வரிசை” என்ற செயல்பாட்டை வரையறுத்தோம். வரிசையாக்க செயல்பாட்டில் அனுப்பப்படும் இரண்டு சரங்களும் தற்காலிக வரிசையாக மாற்றப்பட்டு வரிசையை வரிசைப்படுத்தி சரத்தை str1 ஆக மாற்றும், எனவே வரிசைப்படுத்தப்பட்ட சரம் சேமிக்கப்பட்ட சரம் கடையை ஒரே சரத்தில் வரிசைப்படுத்துகிறது, இது இரண்டு சரங்களுடனும் நடக்கும், நாம் வரிசைப்படுத்தப்பட்ட சரங்களை பெறுகிறோம்.

silent = [s, i, l, e, n, t] // எழுத்து வரிசை
listen = [l, i, s, t, e, n] // எழுத்து வரிசை

வரிசைப்படுத்தப்பட்ட வரிசை = [e, i, l, n, s, t] // str1 இல் சேமிக்கப்பட்ட அமைதியான வரிசைப்படுத்தப்பட்ட வரிசை
வரிசைப்படுத்தப்பட்ட வரிசை = [e, i, l, n, s, t] // str2 இல் சேமிக்கப்பட்ட வரிசைப்படுத்தப்பட்ட வரிசை

ஒரே எழுத்துக்கள் ஒரே மாதிரியாகக் காணப்பட்டால், இரண்டு சரங்களின் ஒவ்வொரு குறியீட்டையும் ஃபார் லூப் மூலம் ஒப்பிடுவோம், பின்னர் அவை அனகிராம்கள் மற்றும் உண்மை மற்றும் "உண்மையான" அச்சிட்டு மற்றும் தவறான அச்சிட்டுகளை தவறானதாகக் கொடுத்தால் திருப்பித் தருகின்றன.

நடைமுறைப்படுத்தல்

செல்லுபடியாகும் அனகிராம்களுக்கான சி ++ நிரல்

#include <iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

bool areAnagram(string str1, string str2)
{
    //getting length of both the strings
    int n1 = str1.length();
    int n2 = str2.length();

    //Checking if both the strings are of same length
    if (n1 != n2)
        return false;

    //Sorting both the string alphabetically
    sort(str1.begin(), str1.end());
    sort(str2.begin(), str2.end());

    //checking each character of string is equal to
    //another character of string
    if (str1 != str2)
        return false;

    return true;
}

int main ()
{
    string str1 = "silent";
    string str2 = "listen";
    if(areAnagram(str1,str2))
        cout << "true";
    else
        cout << "false";
    return 0;
}
true

செல்லுபடியாகும் அனகிராம்களுக்கான ஜாவா நிரல்

import java.util.Arrays;
import java.util.Scanner;
class validAnagrams
{
  public static String sort(String str)
  {
      char temp[] = str.toCharArray();
      Arrays.sort(temp);
      return new String(temp);
  }
  public static boolean areAnagram(String str1, String str2)
  {
    //getting length of both the strings
    int length1 = str1.length();
    int length2 = str2.length();

    //Checking if both the strings are of same length
    if (length1 != length2)
    {
      return false;
    }

    //Sorting both the string alphabetically
    str1=sort(str1);
    str2=sort(str2);

    //checking each character of string is equal to
    //another character of string
    for (int i = 0; i < length1; i++)
    {
        if (str1.charAt(i) != str2.charAt(i))
        {
            return false;
      }
    }

        return true;
    }
  public static void main(String [] args)
  {
    String str1 = "silent";
    String str2 = "listen";
    System.out.println(areAnagram(str1,str2)?"true":"false");

  }
}
true

செல்லுபடியாகும் அனகிராம்களுக்கான சிக்கலான பகுப்பாய்வு

நேர சிக்கலானது

ஓ (nlogn) எங்கே n இது சரத்தின் அளவு. இங்கே நாம் சரத்தை வரிசைப்படுத்துகிறோம், இது nlogn நேரம் எடுக்கும்.

விண்வெளி சிக்கலானது

ஓ (1) ஏனென்றால் நாங்கள் இங்கு கூடுதல் இடத்தைப் பயன்படுத்துவதில்லை.