Advertisement
Guest User

Untitled

a guest
Feb 17th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 KB | None | 0 0
  1. class SearchEngine{
  2.  
  3. private static class Pair implements Comparable<Pair>{
  4. String s, t;
  5.  
  6. public Pair(String s, String t) {
  7. this.s = s;
  8. this.t = t;
  9. }
  10.  
  11.  
  12. @Override
  13. public int compareTo(Pair o) {
  14. if (s.equals(o.s)) {
  15. return t.compareTo(o.t);
  16. }
  17. else {
  18. return s.compareTo(o.s);
  19. }
  20. }
  21. }
  22.  
  23. private class PairForSort implements Comparable<PairForSort>{
  24.  
  25. String s;
  26. Double v;
  27.  
  28. @Override
  29. public int compareTo(PairForSort o) {
  30. return v.compareTo(o.v);
  31. }
  32.  
  33. public PairForSort(String s, Double v) {
  34. this.s = s;
  35. this.v = v;
  36. }
  37. }
  38.  
  39. private static Map<Pair, Integer> res = new TreeMap<>();
  40.  
  41. static int levensteinDelta(String s, String t){
  42. if (res.containsKey(new Pair(s, t))){
  43. return res.get(new Pair(s, t));
  44. }
  45. if (s.equals(t)){
  46. return 0;
  47. }
  48. if (s.length() == 0 || t.length() == 0){
  49. return s.length() + t.length();
  50. }
  51. int result = Math.min(Math.min(levensteinDelta(s.substring(0, s.length()-1), t) + 1, levensteinDelta(s, t.substring(0, t.length()-1)) + 1),
  52. levensteinDelta(s.substring(0, s.length()-1), t.substring(0, t.length()-1)) + (s.charAt(s.length() - 1) == t.charAt(t.length() - 1) ? 0 : 1));
  53. res.put(new Pair(s, t), result);
  54. return result;
  55. }
  56.  
  57. static int maxCommonSubstring(String s, String t){
  58. int[][] dp = new int[s.length() + 1][t.length() + 1];
  59. for (int i = 0; i <= s.length(); i++) {
  60. for (int j = 0; j <= t.length(); j++) {
  61. if (i == 0 || j == 0) dp[i][j] = 0;
  62. else {
  63. if (s.charAt(i - 1) == t.charAt(j - 1)){
  64. dp[i][j] = 1 + dp[i - 1][j - 1];
  65. }
  66. else {
  67. dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
  68. }
  69. }
  70. }
  71. }
  72. return dp[s.length()][t.length()];
  73. }
  74.  
  75. ArrayList<String> all = new ArrayList<>();
  76.  
  77. ArrayList<String> searchRequest(String search){
  78. search = search.toLowerCase();
  79. ArrayList<PairForSort> result = new ArrayList<>();
  80. for (int i = 0; i < all.size(); i++) {
  81. String current = all.get(i).toLowerCase();
  82. int lev = levensteinDelta(current, search);
  83. double met = (maxCommonSubstring(current, search) + 0.0) / Math.min(search.length(), current.length());
  84. if (lev <= 3 || met > 0.8) {
  85. result.add(new PairForSort(current, lev / met));
  86. }
  87. }
  88. result.sort(PairForSort::compareTo);
  89. ArrayList<String> ret = new ArrayList<>();
  90. for (PairForSort p : result) {
  91. ret.add(p.s);
  92. }
  93. return ret;
  94. }
  95.  
  96. void addElement(String s){
  97. if (!s.isEmpty()){
  98. all.add(s);
  99. }
  100. }
  101.  
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement