输入一个字符串,输出该字符串中对称的子字符串的最大长度。

来源:互联网 发布:淘宝套餐链接转换 编辑:程序博客网 时间:2024/04/29 22:00
  /*      * Q75题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。      * 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。      */            public static void main(String[] args) {          //String strs="google";          String strs="mnbvvvvbabbakkeaad";        int len=longestSymmtricalLength(strs);          System.out.println(len);     }      /*      * consider this string:      * ..aAa..(A represents a string of any length)      * if we already know 'A' is a palindrome,      * we just need to test if the char before 'A' and that after 'A' are the same      * if so,A=aAa now.      * Do it again and again to find the result.      * 考虑这个字符串:         aAa .. ..(代表任意长度的字符串)         如果我们已经知道“A”是一个回文,        我们只需要测试,如果之前的“A”和之后的"A"是否相等                       */      public static int longestSymmtricalLength(String str){          if(str==null||str.length()==0){              return -1;          }          int symLen=1;  //总长度        char[] letter=str.toCharArray();          int strLen=str.length();          int curIndex=1;  //索引位置        while(curIndex>0&&curIndex<strLen-1){              //odd symmetrical length,the 'pivot' char is letter[curIndex]         <span style="white-space:pre"></span>//奇对称的长度,letter[curindex]            int i=curIndex-1;              int j=curIndex+1;              while(i>=0&&j<=(strLen-1)&&letter[i]==letter[j]){                  i--;                  j++;              }              int newLen=j-i-1;              if(newLen>symLen){                  symLen=newLen;              }              //even symmetrical length,the 'pivot' chars are letter[curIndex] and letter[curIndex+1]              //即使是对称的长度,letter[curIndex] 和letter[curIndex+1]            //如果相等就再判断它的前后两项是否相等            i=curIndex;              j=curIndex+1;              while(i>=0&&j<=(strLen-1)&&letter[i]==letter[j]){                  i--;                  j++;              }              newLen=j-i-1;              if(newLen>symLen){                  symLen=newLen;              }              curIndex++;          }          return symLen;      }  }  
0 0
原创粉丝点击