• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 88
  • Last Modified:

C# Problem Solving Execerscise

I have been trying to solve this problem https://www.hackerrank.com/challenges/repeated-string and i have tryed to many things but
i 'm stuck so can you help me solving it ?

the main problem here is i want the chars inside the s string to append on itself in a short duration and the size of the string = n and then calculate how many Char 'a' in the string

                       
string s = Console.ReadLine();
			long n = Convert.ToInt64(Console.ReadLine());
			while (s.Count() < n)
			{

			}
			var cont = s.Count(x => x == 'a');
			Console.WriteLine(cont);
			Console.ReadKey();

Open in new window

0
Omar Alaa
Asked:
Omar Alaa
  • 2
  • 2
2 Solutions
 
it_saigeDeveloperCommented:
Programming is as much about solving the problem as it is about finding the most efficient solution.  I can tell you that the can be solved by calculating the results (which is more efficient) as opposed to creating the infinite string and then counting the characters.

-saige-
0
 
Kyle AbrahamsSenior .Net DeveloperCommented:
Yeah, you'll definitely run into timeout errors.

I'm close in my solution but it still needs work:

//test 9;
 string s = "epsxyyflvrrrxzvnoenvpegvuonodjoxfwdmcvwctmekpsnamchznsoxaklzjgrqruyzavshfbmuhdwwmpbkwcuomqhiyvuztwvq";
            long n = 549382313570;

            long countA = 0;
            foreach (char c in s.ToCharArray())
            {
                if (c == 'a')
                    countA++;
            }


            long result = 0;

            if (countA > 0)
            {
                  //find out the amount of times A appears as a proportion.  
                   // so if test 1 is aba  and 10
                    // 2 / 3 == .66 * 10 = 6 times.
                result = (long)Math.Floor(((double)countA / s.Length) * n);

             //then process the leftovers.  
                for (int i = 0; i < (int) n % s.Length; i++)
                {
                    if (s[i] == 'a')
                        result++;
                }
            }
     Console.WriteLine(result);  // expected Result of 16481469408  

Open in new window

0
 
Kyle AbrahamsSenior .Net DeveloperCommented:
Apparently there was a problem with my math.

SPOILER DON'T READ THIS CODE IF YOU DON'T WANT THE SOLUTION.

  long countA = 0;
            foreach (char c in s.ToCharArray())
            {
                if (c == 'a')
                    countA++;
            }


            long result = 0;

            if (countA > 0)
            {
                result = (long)Math.Floor((double)countA * (n / s.Length));

                for (int i = 0; i < (int) (n % s.Length); i++)
                {
                    if (s[i] == 'a')
                        result++;
                }
            }
          
             Console.WriteLine(result);

Open in new window

0
 
it_saigeDeveloperCommented:
As Kyle let the cat out of the bag...  ;)

Here was my implementation (same spoiler as above):
using System;
using System.Linq;

namespace EE_Q28982570
{
	class Program
	{
		static void Main(string[] args)
		{
			string s = Console.ReadLine();
			long count, n = Convert.ToInt64(Console.ReadLine());

			if (string.IsNullOrEmpty(s) || n < 0)
				Console.WriteLine(0);

			count = (n / s.Length) * s.Count(c => c == 'a');
			for (int i = 0; i < n % s.Length; i++)
			{
				if (s[i] == 'a')
				{
					count++;
				}
			}
			Console.WriteLine(count);
			Console.ReadLine();
		}
	}
}

Open in new window


-saige-
0
 
Omar AlaaAuthor Commented:
Thank you guys. and thank you for respecting the Spoil for answers . you were really helpful
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now