例如:
1、ABCFECBA 返回 ABC
2、ABA 返回 ABA
3、ABC 返回 A
4、ABCDFEEFCBA 返回 ABC

解决方案 »

  1.   

    无配置向导用一个for循环守卫判断。。还是等高手生成令人激动的代码吧
      

  2.   


    //以下只是大概思路,可能会有错的地方
    String  str == "ABCDFEEFCBA ";
    StringBuilder  sb = new StringBuilder(str);
    String strTemp = sb.reverse().toString();//abc 则返回的是cba
    if(str.equals(strTemp)){//你说的第二种情况、但是不知道abba这种是不是也返回
      return strTemp ;
    }else{
    //思路:str = ABCFECBA; reverse() 后:str2 = ABCEFCBA;
    //依次逐个比较,只要有一个不等,则不是需要返回的字符,如果依次相等,则是要反回的字符,
    //但是只需要比较到一般的位置(strBytes.length/2),ABCDDCBA,ABCDCBA这两种要区分一下。StringBuilder  sb2 = new StringBuilder();int len = str.length();
    byte[] strBytes = str.getBytes();
    byte[] strTempBytes = str.getBytes();
    boolean falg = false;
    for(int i=0;i<strBytes.length/2;i++){
        if(strBytes[i] != strTempBytes[i]){
           flag = true;
        }
        if(strBytes[i]==strTempBytes[i] && flaf == false){
              sb2.append(strBytes[i]);
        }
    }}
      

  3.   

    我想到一个思路 不知道能不能帮助你:我觉得查找算法中有个二分查找时候这种情况
    str1 ABCDEFCBA 倒转得到 str2 =ABCFEDCBA 将str1 中间截断 得到前半截 ABCD 看看 str2.startWith('ABCD');这样来 递归就行了 我个人认为比较快
      

  4.   

    public class StringDemo
    {
    public static void main(String[] args)
    {
    System.out.println("ABCFECBA" + "\t返回\t" + getStr("ABCFECBA"));
    System.out.println("ABA" + "\t\t返回\t" + getStr("ABA"));
    System.out.println("ABC" + "\t\t返回\t" + getStr("ABC"));
    System.out.println("ABCDFEEFCBA" + "\t返回\t" + getStr("ABCDFEEFCBA"));
    }

    static String getStr(String str)
    {
    return str.substring(0,getPos(str,0,str.length() - 1));
    }

    static int getPos(String str,int low, int high)
    {
    int left = low, right = high;

    while(left < right)
    {
    char lc = str.charAt(left);
    char rc = str.charAt(right);
    if(lc != rc)
    return left == 0 ? 1 : left;
    left ++;
    right --;
    }
    if(left >= right)
    return high + 1;

    return left == 0 ? 1 : left;
    }
    }运行结果: