打印所有具有相同数量的零和一的子串,但我无法
Print all the substrings with equal number of zeros and ones, But am not able to
我想打印所有要打印的子字符串,每个子字符串都应该有相同数量的零,ones.I 已经制定了循环,其中 i 指向索引,最初零的数量和一个等于 0循环运行直到它们都变得相等,然后我将其推入向量中。但是我的代码并不 运行 好。我有足够的时间找出可能是什么错误,但我找不到。
输出
0 1 0 0 1 1 0 1 0 1
预期输出
01 0011 01 01
我无法找出错误,请帮助我。
#include <iostream>
#include <vector>
using namespace std;
vector<string> maxSubStr(string s, int n)
{
vector<string> v;
for (int i = 0; i < n; i++)
{
int ones = 0;
int zeros = 0;
int j = 0;
for (j = i; zeros != ones && j<n; j++)
{
if (s[j] == '0')
{
zeros++;
}
else
{
ones++;
}
}
if (zeros == ones)
{
int size = j - i;
v.push_back(s.substr(i, size));
}
if(j==n){
break;
}
i = j ;
}
return v;
}
int main()
{
string str = "0100110101";
int n = str.length();
vector<string> v;
v = maxSubStr(str, n);
vector<string>::iterator it;
for (it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
return 0;
}
您的代码中有一些小错误。你应该学会使用调试器逐步调试它,错误会变得很明显。
在i
的循环中,在j
的循环中再次设置之前设置j
的值是没有用的。那么,循环应该被限制j<n
以防止访问超过字符串末尾。接下来,您不想测试 s[i]
,而是 s[j]
。最后,测试 zeros == ones
应该在 j
循环中并且应该将 i
设置到下一个位置,即 j + 1
。代码可以变成:
vector<string> maxSubStr(string s)
{
vector<string> v;
int n = s.size();
for (int i = 0; i < n; i++)
{
int ones = 0;
int zeros = 0;
int j = 0;
for (j = i; j < n; j++)
{
if (s[j] == '0')
{
zeros++;
}
else
{
ones++;
}
if (zeros == ones)
{
v.push_back(s.substr(i, j + 1 - i));
i = j;
break;
}
}
}
return v;
}
我想打印所有要打印的子字符串,每个子字符串都应该有相同数量的零,ones.I 已经制定了循环,其中 i 指向索引,最初零的数量和一个等于 0循环运行直到它们都变得相等,然后我将其推入向量中。但是我的代码并不 运行 好。我有足够的时间找出可能是什么错误,但我找不到。
输出
0 1 0 0 1 1 0 1 0 1
预期输出
01 0011 01 01
我无法找出错误,请帮助我。
#include <iostream>
#include <vector>
using namespace std;
vector<string> maxSubStr(string s, int n)
{
vector<string> v;
for (int i = 0; i < n; i++)
{
int ones = 0;
int zeros = 0;
int j = 0;
for (j = i; zeros != ones && j<n; j++)
{
if (s[j] == '0')
{
zeros++;
}
else
{
ones++;
}
}
if (zeros == ones)
{
int size = j - i;
v.push_back(s.substr(i, size));
}
if(j==n){
break;
}
i = j ;
}
return v;
}
int main()
{
string str = "0100110101";
int n = str.length();
vector<string> v;
v = maxSubStr(str, n);
vector<string>::iterator it;
for (it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
return 0;
}
您的代码中有一些小错误。你应该学会使用调试器逐步调试它,错误会变得很明显。
在i
的循环中,在j
的循环中再次设置之前设置j
的值是没有用的。那么,循环应该被限制j<n
以防止访问超过字符串末尾。接下来,您不想测试 s[i]
,而是 s[j]
。最后,测试 zeros == ones
应该在 j
循环中并且应该将 i
设置到下一个位置,即 j + 1
。代码可以变成:
vector<string> maxSubStr(string s)
{
vector<string> v;
int n = s.size();
for (int i = 0; i < n; i++)
{
int ones = 0;
int zeros = 0;
int j = 0;
for (j = i; j < n; j++)
{
if (s[j] == '0')
{
zeros++;
}
else
{
ones++;
}
if (zeros == ones)
{
v.push_back(s.substr(i, j + 1 - i));
i = j;
break;
}
}
}
return v;
}