获取最大长度存在颠倒字符串的子串
时间:2011-02-13
/*******************************************************************************
* @Description 字符串操作类
* @Author CManLH@163.com
* @Date 2008/05/24
******************************************************************************/
public class StringX {
/*
* @Function 从指定字符串中获取最大长度存在颠倒字符串的子串
* @Parm str String 源字符串
* @Return 存在颠倒字符串的最大子串,存在多个时,仅返回最右边的一个
*/
public String getMaxLenReverseString(String str) {
int startIndex = -1;
int lenOfReverseStr = 2;
int tmp = -1;
for ( int i = lenOfReverseStr; i <= str.length(); i++ ) {
tmp = getPosOfReverseString(str, i);
if ( tmp != -1 ) {
lenOfReverseStr = i;
startIndex = tmp;
str = str.substring(0, tmp + lenOfReverseStr);
} else {
break;
}
}
return startIndex == -1 ? str.substring(0,1) : str.substring(startIndex,startIndex + lenOfReverseStr);
}
/*
* @Function 从指定字符串中,获得最右边特定长度存在其颠倒字符串的子串的起始位置
* @Parm str String 源字符串,将从中获取存在颠倒字符串的子串
* @Parm lenOfReverseStr int 颠倒字符串的长度
* @Return int 存在颠倒字符串的子串的起始位置.如不存在子串的颠倒字符串或参数错误,才返回-1
*/
public int getPosOfReverseString(String str, int lenOfReverseStr) {
if ( lenOfReverseStr > str.length() || lenOfReverseStr < 1 ) {
return -1;
}
for ( int i = str.length() - lenOfReverseStr; i >= 0; i-- ) {
if ( str.indexOf(getReverseString(str,i,lenOfReverseStr)) != -1 ) {
return i;
}
}
return -1;
}
/*
* @Function 从指定字符串中得到其子串的颠倒字符串
* @Parm str String 源字符串,将从中获得颠倒字符串
* @Parm s int 将被颠倒子串在源字符串中的起始位置
* @Parm len int 将被颠倒子串的长度
* @Return String 颠倒后得到的字符串。如参数错误就返回空字符串
*/
public String getReverseString(String str, int s, int len) {
int tmp = s + len;
if ( tmp > str.length() || tmp < 1 || s * len < 0 ) {
return "";
}
StringBuilder reverseStr = new StringBuilder(len);
for ( int i = s + len - 1; i >= s; i-- ) {
reverseStr.append(str.charAt(i));
}
return reverseStr.toString();
}
public static void main(String[] args) {
StringX objTest = new StringX();
System.out.println(objTest.getMaxLenReverseString("ARSTUVYWFDEVUTSRZ"));
System.out.println(objTest.getMaxLenReverseString("ABC"));
System.out.println(objTest.getMaxLenReverseString("DEFDEDJH"));
System.out.println(objTest.getMaxLenReverseString("HIJKLKJIH"));
}
}
|