Advertisement
minnera

ctci-making-anagrams

Sep 27th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.64 KB | None | 0 0
  1. // https://www.hackerrank.com/challenges/ctci-making-anagrams/
  2.  
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. class Solution {
  8.  
  9.     static void Main(String[] args) {
  10.         string a = Console.ReadLine();
  11.         string b = Console.ReadLine();
  12.        
  13.         char[] aChar = a.ToCharArray();
  14.         char[] bChar = b.ToCharArray();
  15.        
  16.         int aSize = a.Length;
  17.         int bSize = b.Length;
  18.        
  19.         Search(aChar, bChar, aSize, bSize);
  20.     }
  21.    
  22.     static void Search(char[] aChar, char[] bChar, int aSize, int bSize){
  23.         int deleted = 0;
  24.         char seged;
  25.        
  26.         //kell egy index, ami azt mondja meg, hogy hány "törölt" elem van az egyes tömbökben
  27.         int iDeleted = 0, jDeleted = 0;
  28.         int i = 0; //ez az 'a' első elemének indexe
  29.         int j = 0; //ez a 'b' első elemének indexe
  30.         //bool breakBool = false;
  31.        
  32.         //addig kell mennünk, amíg nem érünk el az első törölt elemig a tömbben
  33.         //mikor végig mentünk b-n, akkor növelni kell i-t.
  34.        
  35.         while(i != (aSize-iDeleted)){
  36.             //Console.WriteLine("_i:" + i);
  37.             //elindulunk b-n és keressük 'a' i-edik elemét benne
  38.             while(j != (bSize-jDeleted)){
  39.                 //Console.WriteLine("_j:" + j);
  40.             //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)
  41.                 if(aChar[i] == bChar[j]){
  42.                     //először b-ben a j-edik elemet rakjuk hátra
  43.                     seged = bChar[j];
  44.                     bChar[j] = bChar[bSize-1-jDeleted];
  45.                     bChar[bSize-1-jDeleted] = seged;
  46.                    
  47.                     //és növeljük a töröltek számát ezután
  48.                    
  49.                     jDeleted++;
  50.                     //
  51.                     //Console.WriteLine(bChar[0] + "," + bChar[1] + "," + bChar[2] + "," + jDeleted);
  52.                     //
  53.                     //ezután az a-ban is hátra rakjuk az i-edik elemet
  54.                     seged = aChar[i];
  55.                     aChar[i] = aChar[aSize-1-iDeleted];
  56.                     aChar[aSize-1-iDeleted] = seged;
  57.                    
  58.                     //és növeljük a töröltek számát ezután
  59.                    
  60.                     iDeleted++;
  61.                     //
  62.                     //Console.WriteLine(aChar[0] + "," + aChar[1] + "," + aChar[2] + "," + iDeleted);
  63.                    
  64.                     //Console.WriteLine("j:_" + j);
  65.                     //
  66.                     //az i-t ilyenkor nem léptetjük, mert az i-edik elemre egy még nem vizsgált karakter került
  67.                    
  68.                     //viszont a külső while ciklusban lépünk egyet
  69.                     //breakBool = true;
  70.                     //continue;
  71.                     //vagy, visszaállítjuk 0-ra a j-t és úgy kezdjük újra itt.
  72.                     j = 0;
  73.                 }
  74.                 else{
  75.                     //ha nem volt egyezés, akkor b-n tovább megyünk
  76.                     j++;
  77.                 }
  78.             }
  79.             //Console.WriteLine("i:_" + i);
  80.             //ha kiértünk ide, akkor végig értünk b-n egy vizsgálattal, az i-t növeljük
  81.             //if(!breakBool)
  82.             //    i++;
  83.             //else{
  84.             //    breakBool = false;                
  85.             //}
  86.             i++;
  87.         }
  88.         deleted = iDeleted + jDeleted; //ez itt az egyezett karakterek száma.
  89.         int finalNumber = (aSize+bSize)-deleted;
  90.         Console.WriteLine(finalNumber);
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement