for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
String[] bin = new String[n];
for (int i = 0; i < n; i++) {
bin[i] = Integer.toBinaryString(arr[i]);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将整个整数数组转换为Strings数组(包含输入字符串的二进制格式),但有一个警告。
例如:
如果输入数组是:2 3 7 10
二进制字符串数组将是:10
11
111
1010
但我希望输出数组如下所示:
0010
0011
0111
1010
#2
如果输入数组是:2 10 20
二进制字符串数组将是:
10
1010
10100
但我希望输出数组如下所示:
00010
01010
10100
这是在纳斯达克实习的编码回合中提出的一个问题。
程序说明:
该程序将一个二进制字符串作为输入。我们必须连续删除所有字符交替的子序列,直到字符串为空。任务是找到这样做所需的最少步骤数。
示例1:
让字符串为:0111001
Removed-0101, Remaining-110
Removed-10 , Remaining-1
Removed-1
No of steps = 3
Example2:
让字符串为:111000111
Removed-101, Remaining-110011
Removed-101, Remaining-101
Removed-101
No of steps = 3
示例3:
让字符串为:11011
Removed-101, Remaining-11
Removed-1 , Remaining-1
Removed-1
No of steps = 3
示例4:
让字符串为:10101
Removed-10101
No of steps = 1
我尝试的解决方案将二进制字符串的第一个字符视为我的子序列的第一个字符。然后创建一个新字符串,如果下一个字符不是交替序列的一部分,则将附加到该字符串中。新字符串成为我们的二进制字符串。这样,循环一直持续到新字符串为空。(有点 O(n^2) 算法)。正如预期的那样,它给了我一个超时错误。在 C++ 中添加了一些与我尝试过的 Java 代码类似的代码。
#include<bits/stdc++.h>
using namespace std;
int main() {
string str, newStr;
int len;
char c;
int count = 0;
getline(cin, str);
len = str.length();
//continue …Run Code Online (Sandbox Code Playgroud)