Loading...
Yovor37 avatar Yovor37 1 Точки

06. Replace Repeating Chars - Text Processing Exercises

Здравейте, имам следният въпрос за тази задача  https://judge.softuni.bg/Contests/Practice/Index/1217#5

 

ето условието :

Write a program that reads a string from the console and replaces any sequence of the same letters with a single corresponding letter.

Examples

Input

Output

aaaaabbbbbcdddeeeedssaa

abcdedsa

qqqwerqwecccwd

qwerqwecwd

Въпросът ми е защо не работи правилно кода когато използвам str.Remove(str[i]);, а работи правилно когато използвам str.RemoveAt(i);

Каква е разликата ?

 

ето и кода:

using System;
using System.Linq;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            var str = Console.ReadLine().ToList();

            for (int i = 0; i < str.Count - 1; i++)
            {
                char curr = str[i];
                char next = str[i +1];
                if (curr == next)
                {
                    str.RemoveAt(i);
                    //str.Remove(str[i]);  така не работи правилно ,защо ?
                    i--;
                }
            }

            Console.WriteLine(string.Join("", str));
           
        }
    }
}
 

Тагове:
0
Fundamentals Module 08/03/2020 18:59:54
nickwork avatar nickwork 657 Точки
Best Answer

 str.RemoveAt(i) ти премахва елемент по даден индекс

 str.RemoveAt(str[i]) ти премахва ПЪРВИЯТ СРЕЩНАТ ЕЛЕМЕНТ отговарящ на условието (в случая str[i]), ако се загледаш по добре ще разбереш какво се получава - в първият пример вместо да получиш abcdedsa - получаваш bcdedsaа (вместо да ти махне пред последното "а" ти маха първото abcdedsaа и изхода ти става bcdedsaа вместо abcdedsa)...просто не си забелязъл разликата

0
Yovor37 avatar Yovor37 1 Точки

Благодаря за пояснението, бях забелязъл, но се чудех защо, хем си го пише в описанието на метода.

 

0
NKKalev avatar NKKalev 10 Точки

Здравейте,

 

Може ли да качите примерно решение на същата задача с Python?

 

Поздрави

0
Elena123456 avatar Elena123456 235 Точки

Здравейте @NKKalev,

макар и да Ви пиша с малко закъснение, предоставям Ви прост алгоритъм за решението на задачата, като смятам, че ще е валиден и на Python: https://pastebin.com/SbjR37wN

Минавам през всички символи с for цикъл  от 0 до text.Length-1 и ако символите са еднакви програмата продължава, но ако са различни запазвам  само предходния символ. Накрая винаги си запазвам последния символ от текста. Не зная за Python, но в C# има клас StringBuilder(), който играе ролята на буфер при конкатенация на символи или стрингове, и точно него използвам за да държа резултата.

Дано да съм Ви помогнала!

Поздрави!

0
donamtf avatar donamtf 9 Точки

hank you so much for this. I was into this issue  VidMate and tired to   tinker around to check if its possible but couldnt get it done. Now that i have seen the way you did it, thanks guys
with
regards

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.