Вы можете попробовать использовать linq вместо цикла for.
GroupBy
создать группу и использовать where
получить count
больше 1.
var r= str.Replace(" ", "").GroupBy(_ => _).Where(x => x.Count() > 1).Select(x => x.Key);
затем используйте метод string.Join
и linq count
вместо цикла, чтобы получить ожидаемый результат.
Console.Write("type a sentence: ");
String str = Console.ReadLine();
var result = str.Replace(" ", "")
.GroupBy(_ => _)
.Where(x => x.Count() > 1)
.Select(x => x.Key);
Console.WriteLine("number of duplicates: " + result.Count() + "\r" + "duplicates are: " + string.Join(" ",result));
c # online
Результат
type a sentence: number of duplicates: 3 duplicates are: h i s