Question:
Say that a "mirror" section in an array is a group of contiguous elements such that somewhere in the array, the same group appears in reverse order. For example, the largest mirror section in {1, 2, 3, 8, 9, 3, 2, 1} is length 3 (the {1, 2, 3} part). Return the size of the largest mirror section found in the given array.
maxMirror({1, 2, 3, 8, 9, 3, 2, 1}) → 3
maxMirror({1, 2, 1, 4}) → 3
maxMirror({7, 1, 2, 9, 7, 2, 1}) → 2
My Solution:
public int maxMirror(int[] nums) {int maxMirror=0 , mirrorCount=0;int len=nums.length;if(len<2) return len;for(int i=0 , j=len , k=0 , l=0 ; i<len-1 ; i++){// look for the currentvalue in the arraywhile(--j>i && nums[j]!=nums[i]);if(j==i){ // no mirror starts from this val! check the next valj=len-1; // next search must start from the endcontinue;}else{ // found a mirrork=i; // store boundaries of the mirrorl=j;mirrorCount++;while( (++k <= l && --j >= i) && (nums[k] == nums[j]) )mirrorCount++;if(mirrorCount > maxMirror)maxMirror=mirrorCount;k=0 ; j=len; mirrorCount=0;}}// end forreturn maxMirror;}