Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // https://www.hackerrank.com/challenges/ctci-making-anagrams/
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- class Solution {
- static void Main(String[] args) {
- string a = Console.ReadLine();
- string b = Console.ReadLine();
- char[] aChar = a.ToCharArray();
- char[] bChar = b.ToCharArray();
- int aSize = a.Length;
- int bSize = b.Length;
- Search(aChar, bChar, aSize, bSize);
- }
- static void Search(char[] aChar, char[] bChar, int aSize, int bSize){
- int deleted = 0;
- char seged;
- //kell egy index, ami azt mondja meg, hogy hány "törölt" elem van az egyes tömbökben
- int iDeleted = 0, jDeleted = 0;
- int i = 0; //ez az 'a' első elemének indexe
- int j = 0; //ez a 'b' első elemének indexe
- //bool breakBool = false;
- //addig kell mennünk, amíg nem érünk el az első törölt elemig a tömbben
- //mikor végig mentünk b-n, akkor növelni kell i-t.
- while(i != (aSize-iDeleted)){
- //Console.WriteLine("_i:" + i);
- //elindulunk b-n és keressük 'a' i-edik elemét benne
- while(j != (bSize-jDeleted)){
- //Console.WriteLine("_j:" + j);
- //ha egyezést találunk, akkor az egyező elemeket a tömb végére rakjuk, vagyis (size-1)-xDeleted indexre. (size-1 az utolsó index)
- if(aChar[i] == bChar[j]){
- //először b-ben a j-edik elemet rakjuk hátra
- seged = bChar[j];
- bChar[j] = bChar[bSize-1-jDeleted];
- bChar[bSize-1-jDeleted] = seged;
- //és növeljük a töröltek számát ezután
- jDeleted++;
- //
- //Console.WriteLine(bChar[0] + "," + bChar[1] + "," + bChar[2] + "," + jDeleted);
- //
- //ezután az a-ban is hátra rakjuk az i-edik elemet
- seged = aChar[i];
- aChar[i] = aChar[aSize-1-iDeleted];
- aChar[aSize-1-iDeleted] = seged;
- //és növeljük a töröltek számát ezután
- iDeleted++;
- //
- //Console.WriteLine(aChar[0] + "," + aChar[1] + "," + aChar[2] + "," + iDeleted);
- //Console.WriteLine("j:_" + j);
- //
- //az i-t ilyenkor nem léptetjük, mert az i-edik elemre egy még nem vizsgált karakter került
- //viszont a külső while ciklusban lépünk egyet
- //breakBool = true;
- //continue;
- //vagy, visszaállítjuk 0-ra a j-t és úgy kezdjük újra itt.
- j = 0;
- }
- else{
- //ha nem volt egyezés, akkor b-n tovább megyünk
- j++;
- }
- }
- //Console.WriteLine("i:_" + i);
- //ha kiértünk ide, akkor végig értünk b-n egy vizsgálattal, az i-t növeljük
- //if(!breakBool)
- // i++;
- //else{
- // breakBool = false;
- //}
- i++;
- }
- deleted = iDeleted + jDeleted; //ez itt az egyezett karakterek száma.
- int finalNumber = (aSize+bSize)-deleted;
- Console.WriteLine(finalNumber);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement