Constructing LPS Array for KMP search

public static  void lps(String s){
        int n=s.length();
        int[] lps=new int[n];
        int len=0;
        int i=1;
        while(i<n){
           if(s.charAt(i)==s.charAt(len)){
                lps[i]=++len;
                i++;
            }
            else{
                if(len==0) {
                    lps[i]=0;
                    i++;
                }
                else {
                    len=lps[len-1]; // I DON'T UNDERSTAND THIS PART CAN SOMEONE PLEASE EXPLAIN ME 
                }
            }
        }