Javascript 查找数组中最长的非重复元素,然后返回其原始值

Javascript 查找数组中最长的非重复元素,然后返回其原始值,javascript,arrays,loops,while-loop,lodash,Javascript,Arrays,Loops,While Loop,Lodash,我的意思是从数组中找到最长的唯一字符串(非重复字母),然后返回其原始值 例如,在下面的数据集中 3 # Number of test cases 3 # Test case 1 has 3 names ALFRED SINGHHHHHH JOHN 6 # Test case 2 has 6 names ALPHA NITRO ROB RICHARD ANON POPE 1 # Test case 3 has 1 name F

我的意思是从数组中找到最长的唯一字符串(非重复字母),然后返回其原始值

例如,在下面的数据集中

3          # Number of test cases
3          # Test case 1 has 3 names
ALFRED
SINGHHHHHH
JOHN
6          # Test case 2 has 6 names
ALPHA
NITRO
ROB
RICHARD
ANON
POPE
1          # Test case 3 has 1 name
FELIX
艾尔弗雷德、理查德和费利克斯的名字是“最长的独一无二的”

我的问题是,我的代码返回的是唯一的值,而不是所需的原始值

因此:

预期产出

Case #1: ALFRED
Case #2: RICHARD
Case #3: FELIX
现实

Case #1: ALFRED
Case #2: RICHAD # Notice the extra R has been removed
Case #3: FELIX
以下是我正在使用的代码片段:

var=require('lodash'))
变量示例='3\n3\nALFRED\nSINGHHHHH\nJOHN\n6\nALPHA\nNITRO\nROB\nRICHARD\nANON\nPOPE\n1\nFELIX';
运行(示例)
函数运行(输入){
var lines=input.split('\n')
var testCases=lines.shift();
var obj={};
对于(var i=0;ilongest.length?currentWord:longest;
}, '');
返回最长的单词;
}
函数运行(输入){
变量行=input.split('\n');
var testCases=lines.shift();
var result={};
对于(var i=0;i

这不是一个非常友好的数据结构,但您仍然可以按如下功能操作:

功能剂量仪{
返回s.split(“\n”)
.slice(1)//扔掉无用的第一条信息
.reduce((r,c,i,a)=>Number.isInteger(+c)?(r.push(a.slice(i+1,+c+i+1)),r):r,[]
.map(g=>g.map(s=>Array.prototype.reduce.call)(s,函数(r,c){
c==r[r.length-1]&&(r.stop=true);
!r.停止和r.推动(c);
返回r;
},[])
.join(“”)
.减少((p,c)=>p.length>c.length?p:c));
}
风险值数据='3\n3\nALFRED\nSINGHHHHH\nJOHN\n6\nALPHA\nNITRO\nROB\nRICHARD\nANON\nPOPE\n1\nFELIX';
console.log(doSomething(数据))下面的解决方案用于迭代并返回每个测试用例的每个最长非重复字符串。它的回调函数使用
数组(通过将输入字符串拆分为
\n
)来获取每种情况下的所有字符串。在拼接之后,我们使用将每个字符串按其唯一长度(字符串中的非重复字符)排序。最后,我们得到数组中的字符串

function getResult(input) {
  var lines = input.split('\n');
  return _.times(lines.shift(), () => {
    return _(lines)
      .splice(0, lines.shift())
      .sortBy(item => _(item).uniq().size())
      .last();
  });
}
var输入='3\n3\nALFRED\nSINGHHHHH\nJOHN\n6\nALPHA\nNITRO\nROB\nRICHARD\nANON\nPOPE\n1\nFELIX';
函数getResult(输入){
变量行=input.split('\n');
返回次数(lines.shift(),()=>{
返回(行)
.splice(0,line.shift())
.sortBy(item=>(item).uniq().size())
.last();
});
}
log(getResult(input))
body>div{min height:100%;top:0;}

如果有两个长度相同的字符串怎么办?您想同时返回这两个吗?@Ibrahimmahrersee这是一个很好的解决方案!但是,在某些情况下,您可能会得到具有相同唯一性的字符串,在这种情况下,它将按字母顺序排序。我认为“排序方式”就是要这样做的。您可以使用“CKLGNTVKPJUQVHFKOJYC”和“ZSQXRMZYDOAICOQHPYHU”作为测试用例,即使“CK…”应该首先出现,但不会出现。在注释中添加了示例名称above@KCM因此,在这种情况下,它应该返回
'ZSQXRMZYDOAICOQHPYHU'
?不,它应该返回
CKLGNTVKPJUQVHFKOJYC
,因为我们需要它,这是按字母顺序排序的,但现在它打破了获得最长的一个的原始想法。因此,如果在列表中添加“CKLGNTVKPJUQVHFKOJYC”
,您将注意到它被忽略。我也会更新这个问题。基本上,我们检查最长的唯一名称,如果有超过1个,那么我们选择第一个按字母顺序显示第一个字符的名称。