美文网首页
统计字符串中连续字符出现的次数

统计字符串中连续字符出现的次数

作者: 周末的游戏之旅 | 来源:发表于2019-08-01 09:49 被阅读0次

问题分析

(***)编一个程序,定义一个字符串变量,输入字符串,判断有没有连续重复字符出现,统计重复字符出现次数。
例如,aaabccdfff,其中a重复出现二次,c重复出现一次,f重复出现二次,共计字符重复五次。

题干中的要求,连续重复。比如aaabba,那么最后一个a和前面的三个a就不算连续的。

思考

根据以往的排序算法,嵌套两层for循环。
外层循环和内层循环进行比较。
当不相等时,停止计数,并记录下来内层循环的位置,下一次的外层循环从当前记录的位置开始。

例如:
aaabccc
当a=b时,b的下标时3,那么下一次外层循环从b的位置开始,b和的下一个进行比较。

实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test3
{
    class Program
    {
        //(***)编一个程序,定义一个字符串变量,输入字符串,判断有没有连续重复字符出现,统计重复字符出现次数。
        //例如,aaabccdfff,其中a重复出现二次,c重复出现一次,f重复出现二次,共计字符重复五次。
        static void Main(string[] args)
        {
            string s = Console.ReadLine();

            int allCount = 0;   //总数量
            //int flag = 0;   //下标
            for (int flag = 0; flag < s.Length; flag++)
            {
                int count = 0;  //单次数量
                for (int j = flag + 1; j < s.Length; j++)
                {
                    if (s[flag] == s[j])
                        ++count;
                    else
                    {
                        break;
                    }
                }
                Console.WriteLine((char)s[flag] + ":" + count);
                allCount += count;
                flag += count;
            }
            Console.WriteLine("total:" + allCount);
        }
    }
}

换一种思路

上述题目中使用了两层for循环,是因为当初只考虑了当前的元素和后面所有的元素比较,一直到不相等为止。
现在换一种思路,两两比较,这样只需要一层循环即可:
例如,aaabbccfff,
第一轮:
array[0] array[1]比较相等
第二轮:
array[1] array[2]比较相等
第三轮:
array[2] array[3] 比较不相等,结束计数,计数器清零。
第四轮:
array[3] array[4] 比较相等
第五轮
array[4] array[5] 比较不相等,结束计数,计数器清零。
....

另一种思路的实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test3
{
    class Program
    {
        //(***)编一个程序,定义一个字符串变量,输入字符串,判断有没有连续重复字符出现,统计重复字符出现次数。
        //例如,aaabccdfff,其中a重复出现二次,c重复出现一次,f重复出现二次,共计字符重复五次。
        static void Main(string[] args)
        {
            string s = Console.ReadLine();

            int allCount = 0;   //总数量
            int count = 0;  //单次数量
            for (int flag = 0; flag < s.Length - 1; flag++)
            {
                if (s[flag] == s[flag + 1])
                    ++count;
                else if (s[flag] != s[flag + 1])
                {
                    Console.WriteLine((char)s[flag] + ":" + count);
                    allCount += count;
                    count = 0;
                }

                if (flag == s.Length - 2)
                {
                    Console.WriteLine((char)s[flag] + ":" + count);
                }
            }

            Console.WriteLine("total:" + allCount);
        }
    }
}

时间复杂度比较

这两种算法的时间复杂度理论上将是一致的,因为比较的次数相等。
例如:array={a,a,a,b,b,c,c,c}
用第一种方法:
array[0] 和 array[1] array[2] array[3]比较,比较了三次
array[3] 和 array[4] array[5] 比较,比较了两次。
array[5] 和 array[6] array[7] 比较,比较了两次。
一共是7次。
用第二中方法:
array[0]和array[1] 比较。
array[1]和array[2] 比较。
array[2]和array[3] 比较。
...
也就等于array.Length-2,也就是7次。

在两个时间复杂度相等且代码实现上复杂度几乎一致(代码行数几乎相等)的情况下,我会选择第一种方法,因为在第二种方法中重复写了两次打印数量,有完全重复的代码,看起来不够优雅。😏

相关文章

  • 第一个只出现一次的字符

    统计字符串中每个字符出现的次数,然后再从左到右遍历字符串,找出出现次数为1的字符串。

  • 统计字符串中连续字符出现的次数

    问题分析 (***)编一个程序,定义一个字符串变量,输入字符串,判断有没有连续重复字符出现,统计重复字符出现次数。...

  • Java 小知识点集合(二)

    1、java统计字符串中每个字符出现的次数 例如String str = “abcaaaefdabbhg”;统计该...

  • 断点续传大规模爬虫

    编写程序 一、count()方法 (1)python中的count()方法:统计字符串中子字符串的出现次数,统计列...

  • C++

    统计字符串中某个字符出现的次数 字符串加入多个相同的字符 字符串切片,截断 进制转换

  • 统计字符串中每个字符出现的次数

    例如String str = “abcaaaefdabbhg”; 统计该字符串中每个字符出现的次数,输出:a===...

  • 字符串价值

    有一种有趣的字符串价值计算方式:统计字符串中每种字符出现的次数,然后求所有字符次数的平方和作为字符串的价值。 例如...

  • 2019-04-23总结

    1.字符串 1.字符串1.count(字符串2) --》统计字符串中字符串出现的次数 2.字符串1.find(...

  • Java - 统计字符串中每个字符出现次数

    利用 Map 统计字符串中每个字符出现次数 控制台打印结果:

  • 统计字符串中字符出现的次数

    1.定义一个空对象来保存字符和它对应出现的次数 2.字符串中第一个重复的字符 3.出现次数最多的字符

网友评论

      本文标题:统计字符串中连续字符出现的次数

      本文链接:https://www.haomeiwen.com/subject/hjgfdctx.html