首页 > 解决方案 > 为什么在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;

标签: c++

解决方案


我不知道你在哪里找到这种方法,但从我的角度来看,作者试图节省 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:对不起,我很着急,没有考虑到平台。应该是这个平台功能,可以逐行读取输入,以便他们为您提供一个模板,让您只关注问题。


推荐阅读