public class palindrome {
//算法
public static boolean isPalindrome(String str)
{
SqStackClass<Character> st = new SqStackClass(); //建立一个顺序栈
int n = str.length();
int i = 0;
while (i < n / 2) //将str前半字符进栈
{
st.push(str.charAt(i));
i++; //继续遍历str
}
if (n % 2 == 1) //n为奇数时
i++; //跳过中间的字符
while (i < n) //遍历str的后半字符
{
if (st.pop() != str.charAt(i))
return false; //若str[i]不等于出栈字符返回false
i++;
}
return true; //是回文返回true
}
public static void main(String[] args) {
System.out.println("测试1");
String str = "abcba";
if (isPalindrome(str))
System.out.println(str + "是回文");
else
System.out.println(str + "不是回文");
System.out.println("测试2");
str = "1221";
if (isPalindrome(str))
System.out.println(str + "是回文");
else
System.out.println(str + "不是回文");
}
}
leetcode上有原题:https://leetcode-cn.com/problems/palindrome-number/
public class palindrome {
//算法
public static boolean isPalindrome(String str)
{
for(int i=0;i<str.length()/2;i++){
if(str.charAt(i)!=str.charAt(str.length()-i-1)){
return false;
}
}
return true;
}
public static void main(String[] args) {
System.out.println("测试1");
String str = "abcba";
if (isPalindrome(str))
System.out.println(str + "是回文");
else
System.out.println(str + "不是回文");
System.out.println("测试2");
str = "1221";
if (isPalindrome(str))
System.out.println(str + "是回文");
else
System.out.println(str + "不是回文");
}
}
可以试试这个效果
思路:
如果是负数则一定不是回文数,直接返回 false
如果是正数,则将其倒序数值计算出来,然后比较和原数值是否相等
如果是回文数则相等返回 true,如果不是则不相等 false
比如 123 的倒序 321,不相等;121 的倒序 121,相等
代码:
class Solution {
public boolean isPalindrome(int x) {
if(x < 0)
return false;
int cur = 0;
int num = x;
while(num != 0) {
cur = cur * 10 + num % 10;
num /= 10;
}
return cur == x;
}
}
如果帮助请点以下采纳,谢谢!
public static boolean isPalindrome(String str){
String reverse = new StringBuffer(str).reverse().toString();
return str.equals(reverse);
}
将原字符串转化为stringbuffer然后调用reverse方法,最后转化为字符串toString和原字符串比较,相等就是回文字符串