鱼C论坛

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

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

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

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

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

x
#include <bits/stdc++.h>
using namespace std;
 char b[201];
int main()
{
    int n;
    string a;
    while(n--)
    {
        cin>>a;
        for(auto i:a)
        {
            b[i]++;
        }
        
        for(int j=1;j<strlen(b),j++)
        {
           if(b[j-1]>b[j])
           {
               
           }
        }
        
    }
}
修改代码,题目链接:https://www.acwing.com/problem/content/773/,想一半没有思路了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-20 12:09:25 | 显示全部楼层
你好!根据题目要求,我们需要找出字符串中最长的连续出现的字符。下面是修改后的代码:
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin >> n;
    while (n--)
    {
        string a;
        cin >> a;
        int maxLen = 1;  // 最长连续出现字符的长度
        int curLen = 1;  // 当前连续出现字符的长度

        for (int i = 1; i < a.length(); i++)
        {
            if (a[ i] == a[i-1])
            {
                curLen++;
                maxLen = max(maxLen, curLen);
            }
            else
            {
                curLen = 1;
            }
        }

        cout << maxLen << endl;
    }

    return 0;
}

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

希望能帮到你!如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

以下是修改后的代码:
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    while(n--) {
        string a;
        cin >> a;
        int maxCount = 0;
        char maxChar = a[0];
        int currentCount = 1;
        for(int i = 1; i < a.size(); i++) {
            if(a[ i] == a[i-1]) {
                currentCount++;
            } else {
                currentCount = 1;
            }
            if(currentCount > maxCount) {
                maxCount = currentCount;
                maxChar = a[ i];
            }
        }
        cout << "The longest consecutive character is " << maxChar << " with length " << maxCount << endl;
    }
    return 0;
}

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

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

使用道具 举报

发表于 2023-10-20 12:10:52 | 显示全部楼层
你的代码中存在一些问题。下面是修改后的代码:
#include <iostream>#include <cstring>using namespace std;int main() {    int n;    cin >> n;        while (n--) {        string a;        cin >> a;                int b[26]{0}; // 用一个数组来记录每个字母出现的次数                for (auto c : a) {            b[c - 'a']++;        }                int maxCount = 0; // 最大连续出现次数        char maxChar = ' '; // 最长连续出现的字符                int count = 1; // 当前字符连续出现的次数                for (int i = 1; i < a.length(); i++) {            if (a[i] == a[i - 1]) {                count++;            } else {                if (count > maxCount) {                    maxCount = count;                    maxChar = a[i - 1];                }                count = 1;            }        }                // 检查最后一个字符        if (count > maxCount) {            maxCount = count;            maxChar = a[a.length() - 1];        }                cout << maxChar << " " << maxCount << endl;    }        return 0;}
修改后的代码使用了一个大小为26的整型数组b,用来记录每个字母出现的次数。遍历字符串a中的每个字符,然后根据字符-'a'的值将其对应的次数加1。

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

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

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int main()
{
        char c , g                            ;
        int b , i , k , m                     ;
        string a                              ;
        cin >> a                              ;
        if(a[0]) {
                for(b = i = m = 1 , c = g = a[0] ; a[i] ; i ++) {
                        if(a[i] == c) {          // 字符连续相同
                                b ++          ;  // 连续相同字符计数
                        } else {                 // 字符改变
                                if(b > m) {      // 判定当前已统计字符是否属于出现次数最多
                                        m = b ;  // 是,记录出现次数
                                        g = c ;  // 记录该字符
                                }
                                b = 1         ;  // 初始化连续出现字符计数器为 1
                                c = a[i]      ;  // 更换记录字符以便继续比较
                        }
                }
        }
        cout << g << " : " << m << endl       ;
}
        编译、运行实况:
D:\[exercise]\C>g++ -o a a.c

D:\[exercise]\C>a
abcdeaaaxxyyzzqrstttttttabctt
t : 7

D:\[exercise]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 23:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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