计算两个字符串最大公共字串的长度,字符不区分大小写

本文介绍了一种使用C++编程语言实现寻找两个字符串之间的最长公共子串的方法。通过双重循环遍历并比较两个输入字符串,算法能够找出并返回最长的匹配子串长度。为了确保比较不受大小写影响,还特别加入了将所有字符转换为小写的预处理步骤。

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

#include
#include
using namespace std;
int Maxsubstr(string a,string b)
{
unsigned int s1,s2;
int count=0,Max=0;
for(unsigned int i=0;a[i]!=’\0’;++i)
{
for(unsigned int j=0;b[j]!=’\0’;++j)
{
s1=i; s2=j;
while(a[s1]==b[s2]&&s1<a.length() && s2<b.length())
{
s1++; s2++; count++;
}
if(count>Max)
{
Max=count;
}
count=0;
}
}
return Max;
}
int main()
{
string s1,s2;
cin>>s1;
cin>>s2;
for(unsigned int i=0;i<s1.length();++i)
{
s1[i]=tolower(s1[i]);
}
for(unsigned int i=0;i<s2.length();++i)
{
s2[i]=tolower(s2[i]);
}
cout<<Maxsubstr(s1,s2)<<endl;
return 0;
}

<think>嗯,用户现在问的是如何用JavaScript删除字符串中的特定子串。首先,我需要确认用户的需求。他们可能有一个字符串,里面包含某些需要的部分,想要去掉这些部分。例如,把“Hello World”中的“World”删掉,得到“Hello ”或者“Hello”(可能还要处理空格)。过用户没有具体说明是要删除所有出现的子串还是只第一次出现的,或者是否有其他条件,比如大小写敏感等。 接下来,我得考虑可能的解决方案。常见的JavaScript字符串处理方法有replace方法,可以使用字符串替换或者正则表达式。比如使用replace,但默认情况下它只会替换第一个匹配项,如果要替换所有,需要用正则表达式加上全局标志g。例如str.replace(/apple/g, ''),这样所有出现的“apple”都会被删除。 另外,用户可能太熟悉正则表达式,所以可能需要给出字符串替换的例子,以及如何处理大小写敏感的情况。比如是否要删除所有形式的“apple”,如“Apple”、“APPLE”等,这时候可以用i标志。 然后,还要考虑其他方法,比如split和join。比如将字符串按子串分割成数组,然后再用空字符串连接起来。例如str.split('apple').join(''),这种方法同样有效,可能更容易理解,特别是对于熟悉正则表达式的用户。 另外,用户可能需要注意原始字符串是否会被修改,但JavaScript中字符串可变的,所以这些方法都会返回新字符串,原字符串变,需要提醒用户这一点。 还要考虑性能问题,如果处理非常大的字符串或者频繁操作,同方法的效率可能有差异,但通常来说,对于一般情况,replace和split/join都是可接受的。 可能需要举几个例子,展示同情况下的处理方式,比如删除所有匹配项,只删除第一个,或者区分大小写。同时,提醒用户注意特殊字符在正则表达式中的处理,比如如果子串包含特殊字符如.或者*,需要转义,避免正则表达式出错。 最后,总结一下几种方法,推荐使用replace加正则表达式,或者split和join,根据具体情况选择。可能用户的需求是简单的替换,所以给出最直接的方法,并提供扩展的例子,让他们可以根据需要调整。</think>在 JavaScript 中删除字符串中的特定子串,可以通过以下 4 种常用方法实现: --- ### 方法 1:`replace()` + 正则表达式(推荐) **删除所有匹配项**(区分大小写): ```javascript let str = "苹果apple香蕉APPLE"; let result = str.replace(/apple/g, ""); console.log(result); // "苹果香蕉APPLE" ``` **删除所有匹配项(区分大小写)**: ```javascript let result = str.replace(/apple/gi, ""); console.log(result); // "苹果香蕉" ``` --- ### 方法 2:`split()` + `join()` 通过拆分重组实现删除: ```javascript let str = "HelloWorldHello"; let result = str.split("World").join(""); console.log(result); // "HelloHello" ``` --- ### 方法 3:`replaceAll()`(ES2021+) 现代浏览器支持的新方法: ```javascript let str = "测试test测试TEST"; let result = str.replaceAll("test", ""); // 区分大小写 console.log(result); // "测试测试TEST" ``` --- ### 方法 4:自定义函数(处理复杂场景) ```javascript function deleteSubstring(str, target) { let regex = new RegExp(target, "g"); return str.replace(regex, ""); } let result = deleteSubstring("a-b-c-d-e-f", "-"); console.log(result); // "abcdef" ``` --- ### 特殊字符处理 如果要删除包含正则特殊字符(如 `.` `*` `+` 等)的子串,需要先转义: ```javascript let str = "1+1=2"; let target = "+"; let escapedTarget = target.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); let result = str.replace(new RegExp(escapedTarget, "g"), ""); console.log(result); // "11=2" ``` --- ### 各方法对比 | 方法 | 优点 | 缺点 | |-----------------|----------------------------|-------------------------| | `replace()` | 灵活支持正则表达式 | 需要处理正则转义 | | `split()+join()`| 简单直观,无需正则 | 性能略低 | | `replaceAll()` | 语义最清晰 | 兼容性要求 ES2021+ | | 自定义函数 | 可封装复杂逻辑 | 需要自行处理边界情况 | --- **实际应用建议**: 1. 优先使用 `replace()` + 正则表达式(适合大部分场景) 2. 处理简单字符串时可用 `split()+join()` 3. 需要兼容旧浏览器时避免使用 `replaceAll()` 4. 删除固定位置子串可结合 `substring()` 或 `slice()`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值