语法碎碎念:C++ string对于 substring比较的支持似乎很差

本文探讨了在C++中使用string的substr方法进行子字符串比较时出现的效率低下问题。在解决一道LeetCode题目时,发现substr方法在实际应用中的速度较慢。通过改变比较方式,使用指针和引用代替substr,实现了速度的显著提升,减少了复制带来的额外开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列不作为一个全面的语法梳理,只是笔者在写程序时遇到的一些有趣的现象,寻思着以后如果写程序注意这些点,也许可以使得程序速度提升。

考虑这个简单的问题:比较 string word,是否与 string s的第 i到j位的子字符串相等。
自然地,我们可以这样写

bool strEq(string & word, string & s, int i, int j){
   
	if (word.size() == j-i+1)
		return word == s.substr(i, j-i+1);
	else
		return false;
}

这借助了 std里面 string自带的method substr。

然而,今天笔者在写一道数据结构题目时,发现这个方法效率极其低下。
题目链接:https://leetcode-cn.com/problems/re-space-lcci/ [面试题 17.13. 恢复空格]
这个题本身也还算有意思,是一个DP问题,想到代码如下:

class Solution {
   
public:
    int respace(vector<string>& dictionary, string sentence) {
   
        int N = sentence.size();
        if (N==0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值