c++ - 将一个字符串中的空格替换成“%20”

查看:233
本文介绍了c++ - 将一个字符串中的空格替换成“%20”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

这个代码测试的时候超时,能帮忙分析一下原因么?九度检测最后一个测试用例超时。

/************************************************************************/
/* 请实现一个函数,将一个字符串中的空格替换成%20。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。                      */
/************************************************************************/
#include <string>
#include <iostream>

using namespace std;

int main()
{
    string s;
    getline(cin, s);
    size_t found = s.find(" ");
    while (found != string::npos)
    {
        s.replace(found, 1, "%20");
        found = s.find(" ");
    }
    cout << s;



}

解决方案

你这个算法逻辑上是对的,但是时间复杂度是O(N^2)的,对于N > 10000的字符串就会超时。

可以改进成线性时间复杂度的算法。

我改了一下:

#include <string>
#include <iostream>

using namespace std;

int main()
{
    string s;
    getline(cin, s);
    string res;
    for (int i = 0; i < s.size(); ++i) {
        if (s[i] == ' ') {
            res += "%20";
        }
        else {
            res.push_back(s[i]);
        }
    }
    cout << res << endl;
    return 0;
}

http://ac.jobdu.com/problem.php?pid=1510 20ms AC

这篇关于c++ - 将一个字符串中的空格替换成“%20”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆