c++ - 为什么在hackerrank中的许多问题中都进行了拆分字符串?
问题描述
这是首席霍珀贪婪算法问题。这里是
https://www.hackerrank.com/challenges/chief-hopper/problem
我想问为什么即使我们没有提供任何字符串作为输入,为什么还要拆分字符串,然后他们使用 stoi 函数将其转换为 int ?
string arr_temp_temp;
getline(cin, arr_temp_temp);
vector<string> arr_temp = split_string(arr_temp_temp);
vector<int> arr(n);
for (int i = 0; i < n; i++) {
int arr_item = stoi(arr_temp[i]);
arr[i] = arr_item;
}
vector<string> split_string(string input_string) {
string::iterator new_end = unique(input_string.begin(), input_string.end(), [] (const char &x, const char &y) {
return x == y and x == ' ';
});
input_string.erase(new_end, input_string.end());
while (input_string[input_string.length() - 1] == ' ') {
input_string.pop_back();
}
vector<string> splits;
char delimiter = ' ';
size_t i = 0;
size_t pos = input_string.find(delimiter);
while (pos != string::npos) {
splits.push_back(input_string.substr(i, pos - i));
i = pos + 1;
pos = input_string.find(delimiter, i);
}
splits.push_back(input_string.substr(i, min(pos, input_string.length()) - i + 1));
return splits;
解决方案
我不知道你在哪里找到这种方法,但从我的角度来看,作者试图节省 IO 操作的时间。我认为这种方法是错误的。与在循环中逐个读取每个 int 值相比,我不知道使用 getline 读取字符串的速度有多快:
for(int i = 0; i<n; i++) cin>> x;
但我很确定将字符串转换为整数更耗时。因此在竞争性编程中使用 scanf/printf 进行快速 IO 或
ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
如果你想使用 cout/cin。综上所述,我认为代码作者试图节省 IO 操作的时间。
UPD:对不起,我很着急,没有考虑到平台。应该是这个平台功能,可以逐行读取输入,以便他们为您提供一个模板,让您只关注问题。
推荐阅读
- javascript - 表中的 eventlistner 每一行只触发最后一行
- mysql - 我们可以在 MySQL Workbench 中使用 SQL 查询提取存储过程的第二个结果集吗?
- php - 托管 2 个网站的 1 个 IIS 服务器的实体 ID 是什么?
- c# - C# - 如何减少表单的不透明度 onDeactivate 事件
- javascript - 将 Vanilla JS 插入 VueJS 框架
- python - 从 Tableau Public 仪表板中抓取数据
- oracle - 如何以 oracle 形式显示图像(6i)
- javascript - 默认情况下突出显示底部导航栏按钮选择(React 路由器)
- mongodb-query - 如何计算 mongo db 中员工的文档数量
- javascript - 突出显示primeng表中的选定行