[数组]Leetcode9回文数
作者:互联网
Leetcode9
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 :
输入: 121
输出: true
思路1:
先变成字符串然后对比:
class Solution {
public boolean isPalindrome(int x) {
if(x<0) return false;
String s1=String.valueOf(x);
String s2=String.valueOf(new StringBuffer(s1).reverse());
for(int i=0;i<s1.length();i++){
if(s1.charAt(i)!=s2.charAt(i))
return false;
}
return true;
}
}
思路2:
数字对比
class Solution {
public boolean isPalindrome(int x) {
if(x<0) return false;
int num=x,bot=0,top=1;
while(x/10!=0){
top*=10;
x/=10;
}
while(num!=0){
int left=num/top;
int right=num%10;
if(left!=right) return false;
num=(num-left*top)/10;
top/=100;
}
return true;
}
}
Leetcode5:
最长回文子串:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
动态规划
思路1:
如果有个回文串,在两端加相同的元素形成的新串也是回文串。设置两个下标i和j。如果ij之乡相同的元素,j就向右移动一个单位,i从头开始扫描。如果扫描到和j相同的判断是否是相邻元素,是的话就是回文串,不是的话就判断i和j中间的元素是不是回文串。
思路2:
中心扩散:
class Solution {
public String longestPalindrome(String s) {
int len=s.length();
if (len==0) return s;
int ll=0,rr=0,res=1;
for(int i=0;i<len;i++){
int l=i-1,r=i+1;
while(l>=0&&r<len&&s.charAt(l)==s.charAt(r)){
int x=r-l+1;
if(x>res){
res=x;
ll=l;
rr=r;
}
l--;
r++;
}
l=i;
r=i+1;
while(l>=0&&r<len&&s.charAt(l)==s.charAt(r)){
int x=r-l+1;
if(x>res){
res=x;
ll=l;
rr=r;
}
l--;
r++;
}
}
return s.substring(ll,rr+1);
}
}
标签:return,int,res,ll,Leetcode9,num,数组,回文 来源: https://blog.csdn.net/HollowKathrine/article/details/110404338