鱼C论坛

 找回密码
 立即注册
查看: 1912|回复: 4

字符串中最长的连续出现的字符

[复制链接]
发表于 2023-10-20 12:09:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. char b[201];
  4. int main()
  5. {
  6.     int n;
  7.     string a;
  8.     while(n--)
  9.     {
  10.         cin>>a;
  11.         for(auto i:a)
  12.         {
  13.             b[i]++;
  14.         }
  15.         
  16.         for(int j=1;j<strlen(b),j++)
  17.         {
  18.            if(b[j-1]>b[j])
  19.            {
  20.                
  21.            }
  22.         }
  23.         
  24.     }
  25. }
复制代码

修改代码,题目链接:https://www.acwing.com/problem/content/773/,想一半没有思路了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-20 12:09:25 | 显示全部楼层
你好!根据题目要求,我们需要找出字符串中最长的连续出现的字符。下面是修改后的代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. int main()
  4. {
  5.     int n;
  6.     cin >> n;
  7.     while (n--)
  8.     {
  9.         string a;
  10.         cin >> a;
  11.         int maxLen = 1;  // 最长连续出现字符的长度
  12.         int curLen = 1;  // 当前连续出现字符的长度

  13.         for (int i = 1; i < a.length(); i++)
  14.         {
  15.             if (a[ i] == a[i-1])
  16.             {
  17.                 curLen++;
  18.                 maxLen = max(maxLen, curLen);
  19.             }
  20.             else
  21.             {
  22.                 curLen = 1;
  23.             }
  24.         }

  25.         cout << maxLen << endl;
  26.     }

  27.     return 0;
  28. }
复制代码


这段代码的思路是遍历输入的字符串,当当前字符与前一个字符相同时,当前连续出现字符的长度加1,并更新最长连续出现字符的长度。当当前字符与前一个字符不同时,将当前连续出现字符的长度重置为1。最后输出最长连续出现字符的长度。

希望能帮到你!如果还有其他问题,请随时提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-20 12:10:07 | 显示全部楼层
你的代码有一些问题,我会帮你修改并提供一个解决方案。这个问题的关键是找到字符串中最长的连续字符。我们可以通过遍历字符串,比较当前字符和前一个字符是否相同,如果相同,我们就增加计数器,否则我们就重置计数器。同时,我们需要一个变量来保存最长的连续字符长度和对应的字符。

以下是修改后的代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. int main() {
  4.     int n;
  5.     cin >> n;
  6.     while(n--) {
  7.         string a;
  8.         cin >> a;
  9.         int maxCount = 0;
  10.         char maxChar = a[0];
  11.         int currentCount = 1;
  12.         for(int i = 1; i < a.size(); i++) {
  13.             if(a[ i] == a[i-1]) {
  14.                 currentCount++;
  15.             } else {
  16.                 currentCount = 1;
  17.             }
  18.             if(currentCount > maxCount) {
  19.                 maxCount = currentCount;
  20.                 maxChar = a[ i];
  21.             }
  22.         }
  23.         cout << "The longest consecutive character is " << maxChar << " with length " << maxCount << endl;
  24.     }
  25.     return 0;
  26. }
复制代码


这段代码首先读取测试用例的数量,然后对每个测试用例,读取字符串并遍历。如果当前字符和前一个字符相同,就增加计数器,否则重置计数器。如果当前计数器的值大于最大计数器的值,就更新最大计数器和对应的字符。最后,输出最长的连续字符和对应的长度。

注意,这段代码假设输入的字符串至少有一个字符,并且只包含小写字母。如果输入可能包含大写字母或其他字符,或者可能为空,你可能需要修改代码以适应这些情况。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-20 12:10:52 | 显示全部楼层
你的代码中存在一些问题。下面是修改后的代码:
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. int main() {
  5.     int n;
  6.     cin >> n;
  7.    
  8.     while (n--) {
  9.         string a;
  10.         cin >> a;
  11.         
  12.         int b[26]{0}; // 用一个数组来记录每个字母出现的次数
  13.         
  14.         for (auto c : a) {
  15.             b[c - 'a']++;
  16.         }
  17.         
  18.         int maxCount = 0; // 最大连续出现次数
  19.         char maxChar = ' '; // 最长连续出现的字符
  20.         
  21.         int count = 1; // 当前字符连续出现的次数
  22.         
  23.         for (int i = 1; i < a.length(); i++) {
  24.             if (a[i] == a[i - 1]) {
  25.                 count++;
  26.             } else {
  27.                 if (count > maxCount) {
  28.                     maxCount = count;
  29.                     maxChar = a[i - 1];
  30.                 }
  31.                 count = 1;
  32.             }
  33.         }
  34.         
  35.         // 检查最后一个字符
  36.         if (count > maxCount) {
  37.             maxCount = count;
  38.             maxChar = a[a.length() - 1];
  39.         }
  40.         
  41.         cout << maxChar << " " << maxCount << endl;
  42.     }
  43.    
  44.     return 0;
  45. }
复制代码

修改后的代码使用了一个大小为26的整型数组b,用来记录每个字母出现的次数。遍历字符串a中的每个字符,然后根据字符-'a'的值将其对应的次数加1。

接下来,使用一个循环来查找最长连续出现的字符。使用变量count来记录当前字符连续出现的次数。当遇到不同的字符时,将countmaxCount进行比较,更新最大连续出现次数和最长连续出现的字符。

最后,输出最长连续出现的字符和次数。

希望这样的修改可以帮助到你。如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-20 16:14:52 | 显示全部楼层
本帖最后由 jackz007 于 2023-10-20 16:24 编辑
  1. #include <bits/stdc++.h>
  2. using namespace std                           ;

  3. int main()
  4. {
  5.         char c , g                            ;
  6.         int b , i , k , m                     ;
  7.         string a                              ;
  8.         cin >> a                              ;
  9.         if(a[0]) {
  10.                 for(b = i = m = 1 , c = g = a[0] ; a[i] ; i ++) {
  11.                         if(a[i] == c) {          // 字符连续相同
  12.                                 b ++          ;  // 连续相同字符计数
  13.                         } else {                 // 字符改变
  14.                                 if(b > m) {      // 判定当前已统计字符是否属于出现次数最多
  15.                                         m = b ;  // 是,记录出现次数
  16.                                         g = c ;  // 记录该字符
  17.                                 }
  18.                                 b = 1         ;  // 初始化连续出现字符计数器为 1
  19.                                 c = a[i]      ;  // 更换记录字符以便继续比较
  20.                         }
  21.                 }
  22.         }
  23.         cout << g << " : " << m << endl       ;
  24. }
复制代码

        编译、运行实况:
  1. D:\[exercise]\C>g++ -o a a.c

  2. D:\[exercise]\C>a
  3. abcdeaaaxxyyzzqrstttttttabctt
  4. t : 7

  5. D:\[exercise]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 05:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表