我学校的compsci网站上的测试人员无法正常工作,所以我目前无法测试我的代码。代码中有两个区域我有些困惑,并且非常感谢一些输入。所以我写的代码如下。
public int countPairs(String[] words) {
Set <String> pairs = new HashSet<String>();
int noOfPairs= 0;
for (String word:words){
Map noOfOccurencesOfEachLetter= getMap(word);
ArrayList<Integer> valuesFromFirstWord = new ArrayList<Integer>(noOfOccurencesOfEachLetter.values());
Collections.sort(valuesFromFirstWord);
java.util.List<String> list = new ArrayList<String>(Arrays.asList(words));
list.remove(word);
String[] oneLessWord = list.toArray(new String[words.length-1]);
for(String secondWord:oneLessWord){
Map secondNoOfOccurencesOfEachLetter = getMap(secondWord);
ArrayList<Integer> valuesFromSecondWord = new ArrayList<Integer>(secondNoOfOccurencesOfEachLetter.values());
Collections.sort(valuesFromSecondWord);
if (valuesFromFirstWord.equals(valuesFromSecondWord)){
noOfPairs+=1;
}
}
}
return noOfPairs/2;
}
此代码旨在向我提供给定的数组(单词)中存在的单词异构对的数量。我编写了一个名为getMap
的方法,它基本上创建了一个映射,其中键是单词中包含的字母的字母,值是单词中该字母的出现次数。
现在我的问题是:
1)这行有效的Java代码吗?
ArrayList<Integer> valuesFromFirstWord = new ArrayList<Integer>
(noOfOccurencesOfEachLetter.values());
或者我是否需要通过一些循环使用来创建字典中包含的值列表?
2)为了不在第二个for循环中包含相同的单词,我创建了一个名为oneLessWord的新数组,该数组包含所有单词元素,除了for循环for for循环的单词。这三行代码是这样做的吗?
java.util.List<String> list = new ArrayList<String>(Arrays.asList(words));
list.remove(word);
String[] oneLessWord = list.toArray(new String[words.length-1]);
我将不胜感激。
非常感谢, Junaid
答案 0 :(得分:1)
1)这行有效的Java代码吗?或者我是否需要通过一些循环使用来创建字典中包含的值列表?
这很好。 Map#values()
返回Collection
,而ArrayList
有constructor,可让您将Collection
传递给它。
2)为了不在第二个for循环中包含相同的单词,我创建了一个名为oneLessWord的新数组,该数组包含所有单词元素,除了for循环for for循环的单词。这三行代码是这样做的吗?
是的,他们就是这么做的。