electromechanica 2023-08-10 22:06 采纳率: 73.3%
浏览 17

leetcode1417题为什么通不过?

第一片代码块中是错误的代码,当测试用例为covid2019时,就通不过。

原题题干是:
给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。

请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。

请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。


错误的代码,其中我规定了odd<n,如果去掉则会报类似内存溢出的错误


class Solution {
public:
    string reformat(string s)
    {
        int n=s.size();
        int alpha=0,digit;//alpha是字母的个数,digit是数字的个数
        int even=0,odd=1;//even代表偶数下标,odd代表奇数下标
        bool f;
        for(auto ch:s)
            if(isalpha(ch))
                alpha++;
        digit=n-alpha;
        if(abs(alpha-digit)>1)
            return {};
        f=alpha>digit? 1:0;
        while(even<n)
        {
            if(isalpha(s[even])!=f)
            {
                while(odd<n&&isalpha(s[odd])!=f)
                {
                    odd+=2;
                }
                swap(s[even],s[odd]);
            }
            even+=2;
        }
        return s;
    }
};

当代码块中按以下方式修改时,则运行正确

       while(even<n)
        {
            if(isdigit(s[even])==f)
            {
                while(isdigit(s[odd])==f)
                {
                    odd+=2;
                }
                swap(s[even],s[odd]);
            }
            even+=2;
        }

除此之外,我还需要解决一个问题,我像下面这样写,系统也能通过

        while(even<n)
        {
            bool t=isalpha(s[even]);
            if(t==f)
            {
                t=isalpha(s[odd]);
                while(t==f)
                {
                    odd+=2;
                    t=isalpha(s[odd]);
                }
                swap(s[even],s[odd]);
            }
            even+=2;
        }

但是一旦我把bool型变量t去掉,换成下面的写法,不论turbo C还是力扣都不能输出正确的答案

        while(even<n)
        {
            if(isalpha(s[even])==f)
            {
                while(isalpha(s[odd])==f)
                {
                    odd+=2;
                }
                swap(s[even],s[odd]);
            }
            even+=2;
        }

  • 写回答

2条回答 默认 最新

  • [PE]经典八炮 2023-08-10 22:12
    关注

    把题目发出来好吗

    评论

报告相同问题?

问题事件

  • 修改了问题 8月12日
  • 修改了问题 8月12日
  • 修改了问题 8月10日
  • 修改了问题 8月10日
  • 展开全部