c++ 如果将最多一个字符设置为1,那么最长的子字符串只包含1的长度是多少?[副本]

vbkedwbf  于 2023-05-30  发布在  其他
关注(0)|答案(2)|浏览(77)

此问题已在此处有答案

Single quotes vs. double quotes in C or C++(15个回答)
Why do 'char' values have to have single quotation marks instead of double? [duplicate](2个答案)
3天前关闭。
如果将最多一个字符设置为1,那么最长的子字符串只包含1的长度是多少?
例如,给定s=“1101100111”,答案是5

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int Largeststring(string nums) {
    int left = 0, curr = 0, ans = 0;
    
    for (int right = 0; right < nums.size(); right++) {
        if (nums[right] == "0") {
            curr++;
        }

        while (curr > 0) {
            if (nums[left] == "0") {
                curr--;
            }
        }
        
        ans = max(ans, right - left + 1);
    }
}

int main()
{
    string s = "1101100111";
    cout << Largeststring(s);
}

在这段代码中,它给出了编译时错误
“error:ISO C++ forbids comparison between pointer and integer [-fpermissive]”for lines“nums[right] ==“0”and the similar line for nums left.
首先,在这种情况下,我不明白指针是什么,也没有整数,我以为这是因为我通过引用调用它给出了这个错误,但我将其切换为通过值调用,但错误似乎仍然存在
因此,最初我尝试使用charvector,我认为错误是因为字符被单独初始化为char向量,但当我切换到string时,似乎存在同样的问题。
请帮助我解决这个问题。

mdfafbf1

mdfafbf11#

我的C / C++时代几年前就结束了,但让我们看看有问题的一行:
nums[left] == "0"
nums[left]是一个char(所以是一种整数)
"0"是一个 string literal(因此是一种字符指针)
因此==尝试将指针"0"与整数nums[left]进行比较。这就是错误消息想要告诉你的。
解决办法应该是:
nums[left] == '0'
'0'是一个字符,所以现在你比较两个字符(一种整数)。

guykilcj

guykilcj2#

您的代码有几个问题
1.语法:nums[i]是一个char,而不是string,所以应该是nums[i] == '0'
1.语法:你应该返回函数的结果:return ans;
1.算法:代码在101上失败
让我们扫描字符串,同时尝试将 each0更改为1,然后返回maximum result

int Largeststring(string nums){
  int result = 0;   /* longest required substring so far */
  int current = 0;  /* current all ones substring */ 
  int startAt = -1; /* where current starts (last zero) */
        
  for (int i = 0; i < nums.size(); ++i) {
    if (nums[i] == '1') /* note that i-th item is a char, not (sub-)string */
      current += 1; /* one more 1 */
    else {          
      current = i - startAt; /* restart from the earlier 1 */
      startAt = i;
    }
            
    result = max(current, result);
  }
        
  return result; /* do not forget to return the answer */
}

fiddle你自己

相关问题