Rolling ha sh: мои коды не работают по модулю для длинной строки - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь решить https://leetcode.com/problems/longest-repeating-substring/ Я хочу использовать "ха" 1011 * для сопоставления строк. Тем не менее, мои коды не работают, когда я имею дело с модулем. Для строки с одинаковыми символами максимальная длина повторяющейся подстроки должна быть string.length - 1.

public class Main {
    public static void main(String[] args) {
        String str = "bbbbbbbbbbbbbbbbbbb";
        System.out.println(str.length() - 1);
        Solution s = new Solution();
        System.out.println(s.longestRepeatingSubstring(str));
    }
}
class Solution {
        public int  longestRepeatingSubstring(String S) {
            HashSet<Long> h = new HashSet();
            long mod = (long)1e7 + 7;
            for(int i = S.length() - 1; i >0; i--){
                h = new HashSet();
                long c = 0;
                int j = 0;
                for(; j < i; j ++){
                    c = (c*26 % mod  + S.charAt(j) - 'a')% mod;
                }

                h.add(c);
                for(; j < S.length(); j++){
                    c -= (S.charAt(j - i ) - 'a') * Math.pow(26,i-1)% mod;

                    c = (c*26 % mod + S.charAt(j) - 'a')% mod;

                    if(h.contains(c)){
                        return i;
                    }
                    h.add(c);

                }
            }
            return 0;
        }
    }

Площадка для моих кодов: https://leetcode.com/playground/F4HkxbFQ

1 Ответ

0 голосов
/ 26 апреля 2020

Мы не можем увидеть вашу исходную ссылку, нам нужен пароль. Использование модуля по модулю кажется очень сложным. Почему бы не попробовать что-то вроде этого

class Scratch {
    // "static void main" must be defined in a public class.
    public static void main(String[] args) {
        String str = "bbaaabbbbccbbbbbbzzzbbbbb";
        System.out.println(str.length() - 1);
        Solution s = new Solution();
        System.out.println(s.longestRepeatingSubstring(str));
    }

    static class Solution {
        public int longestRepeatingSubstring(String s) {
            int max = -1;
            int currentLength = 1;

            char[] array = s.toCharArray();
            for (int index = 1; index < array.length; index++) {
                if (array[index - 1] == array[index]) {
                    currentLength++;
                    max = Math.max(max, currentLength);
                } else {
                    currentLength = 1;
                }
            }
            return max;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...