Java 字符串相似性代码更改
我编写了一个代码,但它刚刚通过了一个测试用例,所以我不明白我犯了什么错误,我在代码中做了什么更改,所以问题和代码如下: 问题: 对于两个字符串A和B,我们将字符串的相似性定义为两个字符串共用的最长前缀的长度。例如,字符串“abc”和“abd”的相似性为2,而字符串“aaa”和“aaab”的相似性为3 计算字符串S与每个后缀的相似度之和 输入: 第一行包含测试用例的数量T。接下来的每一行都包含一个字符串 输出: 输出T行,其中包含对应测试用例的答案 限制条件:Java 字符串相似性代码更改,java,Java,我编写了一个代码,但它刚刚通过了一个测试用例,所以我不明白我犯了什么错误,我在代码中做了什么更改,所以问题和代码如下: 问题: 对于两个字符串A和B,我们将字符串的相似性定义为两个字符串共用的最长前缀的长度。例如,字符串“abc”和“abd”的相似性为2,而字符串“aaa”和“aaab”的相似性为3 计算字符串S与每个后缀的相似度之和 输入: 第一行包含测试用例的数量T。接下来的每一行都包含一个字符串 输出: 输出T行,其中包含对应测试用例的答案 限制条件: 1您的算法很难阅读,因为它包含太多的
1您的算法很难阅读,因为它包含太多的变量,并且没有正确地分解为较小的易于阅读、可维护和可测试的部分。我试图以一种更直接的方式实现您问题的解决方案,这样您就可以检查它,使用它并从中学习一些东西。希望对你有帮助
package test;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Main {
public static void main(String[] args) {
Main m = new Main();
m.start();
}
private void start() {
try {
parse("x.txt");
} catch (IOException ex) {
ex.printStackTrace();
}
}
private void parse(String filename) throws IOException {
Reader r = null;
try {
r = new FileReader(filename);
BufferedReader br = new BufferedReader(r);
String line = null;
while ((line = br.readLine()) != null) {
String[] strings = line.split(" ");
/* skip the first one, not important for us */
for (int i = 1; i < strings.length; i++) {
System.out.println("RESULT: for '" + strings[i] + "' is " + computeSimilarity(strings[i]));
}
}
} finally {
if (r != null) {
r.close();
}
}
}
private int computeSimilarity(String s) {
int result = 0;
for (int i = 0; i < s.length(); i++) {
/* compare also with itself */
result += compareSimilarity(s, s.substring(i));
}
System.out.println(" " + s + " -> " + result);
return result;
}
private int compareSimilarity(String s1, String s2) {
int result = 0;
/* s1.length() > s2.length() */
for (int i = 0; i < s2.length(); i++) {
if (s1.charAt(i) == s2.charAt(i)) {
result++;
} else {
break;
}
}
System.out.println(" " + s1 + " " + s2 + " -> " + result);
return result;
}
}
你需要编辑你的帖子,并清楚地说明你有什么问题。很难说,因为描述含糊不清,代码也没有文档。问题:对于数字T,我输入“Elton John”,您的代码将继续使用最初分配给的任何T(幸运的是,我认为它不会按原样编译)。这是来自InterviewStreet的挑战集合的问题。原始问题陈述在
package test;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Main {
public static void main(String[] args) {
Main m = new Main();
m.start();
}
private void start() {
try {
parse("x.txt");
} catch (IOException ex) {
ex.printStackTrace();
}
}
private void parse(String filename) throws IOException {
Reader r = null;
try {
r = new FileReader(filename);
BufferedReader br = new BufferedReader(r);
String line = null;
while ((line = br.readLine()) != null) {
String[] strings = line.split(" ");
/* skip the first one, not important for us */
for (int i = 1; i < strings.length; i++) {
System.out.println("RESULT: for '" + strings[i] + "' is " + computeSimilarity(strings[i]));
}
}
} finally {
if (r != null) {
r.close();
}
}
}
private int computeSimilarity(String s) {
int result = 0;
for (int i = 0; i < s.length(); i++) {
/* compare also with itself */
result += compareSimilarity(s, s.substring(i));
}
System.out.println(" " + s + " -> " + result);
return result;
}
private int compareSimilarity(String s1, String s2) {
int result = 0;
/* s1.length() > s2.length() */
for (int i = 0; i < s2.length(); i++) {
if (s1.charAt(i) == s2.charAt(i)) {
result++;
} else {
break;
}
}
System.out.println(" " + s1 + " " + s2 + " -> " + result);
return result;
}
}
ababaa ababaa -> 6
ababaa babaa -> 0
ababaa abaa -> 3
ababaa baa -> 0
ababaa aa -> 1
ababaa a -> 1
ababaa -> 11
RESULT: for 'ababaa' is 11
aa aa -> 2
aa a -> 1
aa -> 3
RESULT: for 'aa' is 3