【回文数】

找最长回文数

类型

1.aba
2.abba
单独的一个比如a 也算是一个回文数。

思路:

我的设想

我一开始觉得遍历一下数组,然后把每个i分别带入aba的方法和abba的方法进行判断。这就是我的思路。

实现

1.我写了dan(int j, String s)这个方法来实现aba类型的。
2.shuang(int j, String s)来判断abba类型的。

方法实现过程:

dan

一开始我判断它是不是第0号位的如果是就返回。然后用一个int left 和一个int right来指向下标。right指的是j 的下标。left指的是j-1的下标。然后判断right和left的下标指向的是不是相等的,如果是那么就把这个穿起来
方法是:==dan1 = s.charAt(left) + dan1 + s.charAt(right);==这个位置是非常重要的对于shuang()方法也是非常重要的因为呢;它们是穿的左边和右边,不要一开始就把dan1放在左边。这样会出问题。然后呢还有一个判断语句当防止产生越界异常。每次都要right++,left–然后只要不相等就跳出这个循环。
对于shuang()其实也差不多只是它的j不能等于s.length()-1因为他是往左右两边往外边扩展的。然后它left是j-1,right是j+1。

最后呢接收到一个dan和shaung的字符串然后比对他们的长度。输出最长的就完事了!。
这只是一个本方法。代码如下
package likou;

public class five {
public static void main(String[] args) {
five a = new five();
a.longestPalindrome(“babad”);
System.out.println(a.longestPalindrome(“babad”));
}

public String longestPalindrome(String s) {
    if (s.length() == 1) {
        return s;
    }
    String dan = s.charAt(0)+"";
    String shuang = "";

    for (int j = 0; j < s.length(); j++) {
        if (dan(j, s).length()>dan.length()){
            dan="";
            dan=dan(j, s);
        }
        if (shuang(j, s).length()>shuang.length()){
            shuang="";
            shuang=shuang(j, s);
        }
    }
        //目前我写的 单双 判断应该是没有错的但是  我们第一个里面的dan  shuang传入方法后,但是在方法里面赋值没有改变。
    if (dan.length() > shuang.length()) {
        return dan;
    } else {
        return shuang;
    }
}

public String dan(int j, String s) {
    if (j == 0) {
        return "";
    }
    int left = j - 1;
    int right = j;

// 不对,不对应该要先执行一遍!
String dan1 = “”;
while (left >= 0 && right <= s.length() - 1) {
if (s.charAt(left) == s.charAt(right)) {
dan1 = s.charAt(left) + dan1 + s.charAt(right);
}
else{
break;
}
left–;
right++;
}
return dan1;
//现在对了!! 但是还是有个问题就是
// 下一次传入参数进来那么String dan还会继续串联起来。
}

public String shuang(int j, String s) {
    if (j == s.length() - 1 || j == 0) {
        return "";
    } else {
        int left = j - 1;
        int right = j + 1;
        String shuang1 = s.charAt(j) + "";
        while (left >= 0 && right <= s.length() - 1) {
            if (s.charAt(left) == s.charAt(right)) {
                shuang1 = s.charAt(left) + shuang1 + s.charAt(right);
            }
            else{
                break;
            }
            left--;
            right++;
        }
        return shuang1;
    }
}

}

谢谢大家!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值