compute_lps Function

private pure function compute_lps(string) result(lps_array)

Computes longest prefix suffix for each index of the input ‘string’

Returns an array of integers

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: string

Return Value integer, (len(string))


Called by

proc~~compute_lps~~CalledByGraph proc~compute_lps compute_lps proc~count_char_char count_char_char proc~count_char_char->proc~compute_lps proc~find_char_char find_char_char proc~find_char_char->proc~compute_lps proc~replace_all_char_char_char replace_all_char_char_char proc~replace_all_char_char_char->proc~compute_lps interface~count count interface~count->proc~count_char_char interface~find find interface~find->proc~find_char_char proc~find_char_string find_char_string interface~find->proc~find_char_string proc~find_string_char find_string_char interface~find->proc~find_string_char proc~find_string_string find_string_string interface~find->proc~find_string_string interface~replace_all replace_all interface~replace_all->proc~replace_all_char_char_char proc~replace_all_char_char_string replace_all_char_char_string interface~replace_all->proc~replace_all_char_char_string proc~replace_all_char_string_char replace_all_char_string_char interface~replace_all->proc~replace_all_char_string_char proc~replace_all_char_string_string replace_all_char_string_string interface~replace_all->proc~replace_all_char_string_string proc~replace_all_string_char_char replace_all_string_char_char interface~replace_all->proc~replace_all_string_char_char proc~replace_all_string_char_string replace_all_string_char_string interface~replace_all->proc~replace_all_string_char_string proc~replace_all_string_string_char replace_all_string_string_char interface~replace_all->proc~replace_all_string_string_char proc~replace_all_string_string_string replace_all_string_string_string interface~replace_all->proc~replace_all_string_string_string proc~find_char_string->interface~find proc~find_string_char->interface~find proc~find_string_string->interface~find proc~replace_all_char_char_string->interface~replace_all proc~replace_all_char_string_char->interface~replace_all proc~replace_all_char_string_string->interface~replace_all proc~replace_all_string_char_char->interface~replace_all proc~replace_all_string_char_string->interface~replace_all proc~replace_all_string_string_char->interface~replace_all proc~replace_all_string_string_string->interface~replace_all

Variables

Type Visibility Attributes Name Initial
integer, private :: i
integer, private :: j
integer, private :: length_string

Source Code

   pure function compute_lps(string) result(lps_array)
      character(len=*), intent(in) :: string
      integer :: lps_array(len(string))
      integer :: i, j, length_string

      length_string = len(string)

      if (length_string > 0) then
         lps_array(1) = 0

         i = 2
         j = 1
         do while (i <= length_string)
            if (string(j:j) == string(i:i)) then
               lps_array(i) = j
               i = i + 1
               j = j + 1
            else if (j > 1) then
               j = lps_array(j - 1) + 1
            else
               lps_array(i) = 0
               i = i + 1
            end if
         end do
      end if

   end function compute_lps