平时不怎么刷力扣,最近比较想练练算法能力了,来玩一玩来了,欢迎收藏和评论,代码都是在力扣测试过的
☃️☃️☃️
输入整数判断是否是回文🌇
这里需要注意负数的情况,如果是负数的话就不可能是回文
/**
* 输入是int类型的数值判断情况
* @param x
* @return
*/
public static boolean isPalindromeInt(int x) {
if(x < 0){
return false;
}
int cur = 0;
int num = x;
boolean flag = true;
while (num != 0){
cur = cur * 10 +num % 10; //不需要一开始直到这个x究竟是几位数,
num /= 10;
}
return cur==x;
}
输入字符串类型判断回文🏜️
这里是我自己写的一个方法,根据“中心扩散法”得到思考而写下来的,效果好像还不错
/**
* 传入的是字符串
* @param s
* @return
*/
public static boolean isPalindromeStr(String s) {
if (s == null || s.length() == 0) {
return false;
}
int strLen = s.length();
int left = 0;
int right = 0;
int media = strLen / 2; //得到中间的坐标
boolean flag = true;
//分为奇偶两种情况
if(media % 2 == 0){ //偶数
left = media - 1;
right = media;
}else{
//奇数
left = media - 1;
right = media + 1;
}
//中心扩散法
while (left > 0){
if(s.charAt(left) == s.charAt(right)){
right++;
left--;
}else{
flag = false;
break;
}
}
return flag;
}
最长回文子串问题🌃
这是回文里面我个人认为比较有难度的一道题,在力扣的第五题,难度也是困难级别⭕
注意最后的返回的结果是要加一操作的,因为这中间maxSize有可能为-1的情况,字串是不能从s下标-1开始的,最小都是0开始,所以要加一
public static String longestPalindrome1(String s) {
if (s == null || s.length() == 0) {
return "";
}
int strLen = s.length();
int left = 0;
int right = 0;
int len = 1;
int maxStart = 0;
int maxLen = 0;
for (int i = 0; i < strLen; i++) {
left = i-1;
right = i + 1;
while (left >= 0 && s.charAt(left) == s.charAt(i)) {
len++;
left--;
}
while (right < strLen && s.charAt(right) == s.charAt(i)) {
len++;
right++;
}
while (left >= 0 && right < strLen && s.charAt(right) == s.charAt(left)) {
len = len + 2;
left--;
right++;
}
if (len > maxLen) {
maxLen = len;
maxStart = left;
}
len = 1;
}
return s.substring(maxStart + 1, maxStart + maxLen + 1);
}