Java Plagiarism Check
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
public static boolean plagiarismCheck(String[] code1, String[] code2) {
String c1 = String.join(" ", code1);
String c2 = String.join(" ", code2);
if (c1.equals(c2)) {
return false;
}
List<String> d1 = new ArrayList<>();
List<String> d2 = new ArrayList<>();
Matcher m1 = Pattern.compile("\\w+").matcher(c1);
while (m1.find()) {
d1.add(m1.group());
}
Matcher m2 = Pattern.compile("\\w+").matcher(c2);
while (m2.find()) {
d2.add(m2.group());
}
Map<String, String> rCand = new LinkedHashMap<>();
for (int k = 0; k < d1.size(); k++) {
String v = d1.get(k);
if (!v.equals(d2.get(k)) && !v.matches("\\d+")) {
rCand.put(v, d2.get(k));
}
}
for (Map.Entry<String, String> e : rCand.entrySet()) {
String orig = e.getKey();
c1 = c1.replaceAll("(\\W)" + orig + "(\\W*)", "$1PLACEHOLDER" + orig + "$2");
c1 = c1.replaceAll("(\\W)" + orig, "$1PLACEHOLDER" + orig);
}
for (Map.Entry<String, String> e : rCand.entrySet()) {
String orig = e.getKey();
String repl = e.getValue();
c1 = c1.replaceAll("(\\W)PLACEHOLDER" + orig + "(\\W)", "$1" + repl + "$2");
c1 = c1.replaceAll("(\\W)PLACEHOLDER" + orig, "$1" + repl);
}
return c1.equals(c2);
}
}
This flattens both snippets, tries consistent identifier replacements, and checks whether the rewritten code matches.