我有一个非常大的coloumns feed文件。我会represennt一个字符串coloumns之一,我要检查这些字符串...这个算法的minimaze时间复杂度(在feed中选择常见的子串)
让我们看看我们这些字符串值(在coloumn),进料显然是finctional :):
"Gia Joe Black Viper"
"Street Fighter...Ken"
"Mortal Kombat, Scorpion"
"Gia Joe Desert Fox"
"Mortal Kombat, Sub Zero"
"Street Fighter...Ryu"
我想找到字符串中的匹配...所以简化任务是:找到字符串的子串的一个在另一个字符串,并到HashSet收集这些子......
所以basicaly的结果标签为:
Gi Joe
Mortal Kombat
Street Fighter
我写了一个简单的代码来测试算法,但我想最小化这个任务的时间复杂度,空间复杂性不如时间重要...(您可以认为饲料像10.000行一样,所以它是基数有时间复杂度低) 你可以找到和我下面的代码阅读:
String[] stringArray = new String[6];
stringArray[0] = "Mortal Kombat - Scorpion";
stringArray[1] = "Street Fighter - Ken";
stringArray[2] = "Mortal Kombat - Scorpion";
stringArray[3] = "Gi Joe - Desert Fox";
stringArray[4] = "Gi Joe - Desert Dog";
stringArray[5] = "Street Fighter - Ryu";
HashSet<String> commonStrings = new HashSet();
for (int i = 0; i < stringArray.length; i++) {
String[] splittedString = stringArray[i].split("[ ]");
System.out.println("i"+i);
for (int j = 0; j < stringArray.length; j++) {
System.out.println("j"+j);
String matchable = "";
for (int k = 0; k < splittedString.length; k++) {
System.out.println("k"+k);
if(k==0)matchable=matchable;
else {matchable = matchable + " " + splittedString[k];}
if(j!=i){
System.out.println("StringArray["+j+"]("+stringArray[j]+")index.of("+matchable+")"+"is"+matchable.indexOf(stringArray[j]));
if (stringArray[j].indexOf(matchable) > 0) {
commonStrings.add(matchable);
}
}
}
}
赞赏,使我的代码更好的任何建议,谢谢!
有关Java约定的副作用:变量应以小写字母开头:'StringArray' =>'stringArray'。 – assylias
你有权利,我只是试图快速与代码...编辑。 – czupe
你在寻找整个单词还是字母的任何部分。 –