Поиск повторяющихся слов - PullRequest
0 голосов
/ 25 апреля 2020

Создайте процедуру, которая для произвольной входной символьной строки, состоящей из произвольного набора слов, выбирает последовательности с наибольшим количеством слов, повторяемых как минимум дважды.

Например, для входной строки:

Мама быстро помыла раму Я вымыла пол Мама быстро помыла раму Я вымыла пол

Результат: мама быстро помыла раму

Извините, я забыла указать, что Есть два пробела между фразами. Я пытался переделать мою похожую программу. Где функция должна удалить повторяющиеся слова (есть перечисления, разделенные запятыми).

Decare
  v_str_print VARCHAR2 (100); - output string (sorted)
  PROCEDURE myproc1 (p_str_in IN VARCHAR2, p_str_out OUT VARCHAR2) IS
    v_comma_count NUMBER; - number of commas
    v_str_temp_left VARCHAR2 (100);
    v_str_temp_right VARCHAR2 (100);
    v_str_final VARCHAR2 (100);
    v_str_input VARCHAR2 (100);
  BEGIN
    v_comma_count: = REGEXP_COUNT (p_str_in, ',');
    v_str_input: = p_str_in;
    FOR i IN 1..v_comma_count LOOP
      WHILE regexp_like (v_str_input, '^,') OR regexp_like (v_str_input, '^ [[: space:]]')
         Loop
           v_str_input: = TRIM (v_str_input);
           v_str_input: = LTRIM (v_str_input, ',');
         END LOOP;
      - get the first word
      v_str_temp_left: = REGEXP_REPLACE (REGEXP_SUBSTR (v_str_input, '^ [A-Z] {1,},', 1), ','); - remove the comma
      - form the output line
      v_str_final: = v_str_final || v_str_temp_left || ',';
      - we remove the first word from the string
      v_str_temp_right: = REGEXP_REPLACE (v_str_input, '^ [A-Z] {1,},');
      - look for the first word in the line and, if found, replace with a space
      v_str_temp_right: = REGEXP_REPLACE (v_str_temp_right, v_str_temp_left || ',', ',');
      - overwrite the resulting string (without the first word) with the result of the comparison
      v_str_input: = v_str_temp_right;
    END LOOP;
    v_str_final: = RTRIM (v_str_final, ',');
    p_str_out: = v_str_final;
  END myproc1;
BEGIN
  myproc1 (',,, AA, AB, AA, AA, AA, ABC, ABC ,,,, ABC, ABC, ABC, AC, ABC, AB', v_str_print);
  dbms_output.put_line (v_str_print);
END
...