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

Omar AlaaAsked:
Who is Participating?
 
Kyle AbrahamsConnect With a Mentor Senior .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:
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
 
it_saigeConnect With a Mentor DeveloperCommented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.