我有两根弦:
let string1 = "Some text here";
let string2 = "text here as well";
我想检查
string1
的结尾部分是否与 string2
的开头匹配。
我正在输出
string1 + string2
。就我而言,我不想两次打印相同的单词。例如,我不想打印 "Some text heretext here as well"
。
如何检查这一点?我尝试过
startsWith
/endsWith
和通过从太空吐出字符串来循环。但我认为我的方法不正确,因为字符串的匹配部分的长度可能会有所不同。
字符串也可以包含破折号。例如它可以是这样的:
let string1 = "Some-text here";
let string2 = "text here as well";
在上面的示例中,理想的输出将是
"Some-text here as well"
。
您可以使用 String.substring 从
string1
的末尾和 string2
的开头获取两个输入值的子字符串。如果这些相同,我们就发现了重叠。
let string1 = "Some-text here";
let string2 = "text here as well";
let overlap = null;
for(let i = 1; i <= string1.length; i++) {
if (string1.substring(string1.length - i) === string2.substring(0, i)) {
overlap = string2.substring(0, i);
break;
}
}
console.log('Overlap:', overlap);
let concatenated = string1.replace(overlap, '') + string2;
console.log('string1 + string2:',concatenated);
这是一个可能的暴力解决方案:
let resultIdx = 0;
for (let idx = 0; idx < Math.min(string1.length, string2.length); idx++) {
if (string2.substring(0, idx) === string1.substring(string1.length - idx)) {
resultIdx = idx
}
}
let result = string1 + string2.substring(resultIdx)
我们循环遍历字符串并检查是否有任何子字符串匹配。如果是这样,我们保存最后一个索引并用它来构建解决方案(保存在变量
result
中)。这是你想找的吗?
我认为这是一个很好的问题,所以我想我应该记下我对此的想法
首先介绍一下背景
我正在解析 html 文本流以提取具有以下形式的输入字段的值
<input name="fkey" value="some--hash--value">
我正在处理来自响应的数据块,因为我在有限的内存资源内工作
我时不时地注意到我找不到搜索词,因为搜索字符串部分出现在流块的末尾
好回答问题
我更改了变量名称以避免
string1
和 string2
之间的混淆
我添加了一些文本以允许多个匹配
//
var log=(...a)=>output.append(...a,'\n');
var first = 'Some here text here';
var second = 'here text here as well';
log(' first ','[' +first+ ']');
log('second ','['+ second +']');
var max = '';
var n = second.length;
for(var i=1;i<=n;i++){
var sub = second.slice(0,i);
if(first.endsWith(sub)){
if(sub>max){
max = sub;
}
log('\n','-- match --');
log(' sub ','['+ sub +']');
log(' first ','['+ first.slice(0,-i) +']');
log('second ','['+ second.slice(i) +']');
}
}//for
log('\n','-- result --');
log('concat ','['+ first+second.slice(max.length) +']');
<pre id=output></pre>
对于缪斯来说,我想我会包括从流数据中读取值的解决方案
我已经执行了
indexOf
所以我知道搜索词没有出现在整个数据块中,这允许进一步
优化
var s = '';
function ondata(data){
s += data;
var search = 'name="fkey"';
var i1 = s.indexOf(search);
if(i1==-1){
var n = search.length;
for(var i=1;i<n;i++){
var sub = search.slice(0,i);
if(s.endsWith(sub)){
s = s.slice(-i);
return;
}
}//for
}
if(i1!=-1){
var i2 = s.indexOf('value="',i1);
if(i2!=-1){
var i3 = s.indexOf('"',i2+7);
if(i3!=-1){
var fkey = s.slice(i2+7,i3);
complete(fkey);
s = '';
}
}
return;
}
s = '';
}//ondata
function complete(fkey){
console.log(fkey);
}//complete
无论如何,3 年内有 199 次观看——我不认为有人会看到这个
我很惊讶这不是一个更受欢迎的问题
祝你有美好的一天
let string1 = "Some-text here";
let string2 = "text here as well";
let splitString1 = string1.split(" ");
let splitString2 = string2.split(" ");
let stringSet1 = new Set(splitString1);
let stringSet2 = new Set(splitString2);
console.log(stringSet1);
console.log(stringSet2);
function wordDiff(strSet1, strSet2) {
let _wordDiff = new Set(stringSet1);
for (let elem of stringSet2) {
if (_wordDiff.has(elem)) {} else {
_wordDiff.add(elem);
}
}
return _wordDiff;
}
let result = wordDiff(stringSet1, stringSet2);
console.log(result);