请设计一个算法,使用栈,判断一个字符串是否为回文。回文:是指正读反读均相同的字符序列,如abba和abdba都是回文,而hello就不是回文。(提示:使用数组存储一个字符串,然后将一半字符入栈。
时间: 2024-05-02 12:21:29 浏览: 75
算法步骤:
1. 将字符串转换为字符数组。
2. 计算字符数组的长度,如果长度为奇数,则中间的字符不需要比较,直接忽略。
3. 将字符数组的前一半依次入栈。
4. 从字符数组的中间(或者中间偏右)开始,依次与栈顶元素比较。如果不相同,则不是回文;如果所有字符都比较完毕,且没有不相同的,则为回文。
Java代码实现:
```java
public boolean isPalindrome(String str) {
char[] chars = str.toCharArray();
int len = chars.length;
int mid = len / 2;
Stack<Character> stack = new Stack<>();
for (int i = 0; i < mid; i++) {
stack.push(chars[i]);
}
int start = mid + (len % 2 == 0 ? 0 : 1);
for (int i = start; i < len; i++) {
if (chars[i] != stack.pop()) {
return false;
}
}
return true;
}
```
测试代码:
```java
String str1 = "abba";
String str2 = "abdba";
String str3 = "hello";
System.out.println(isPalindrome(str1)); // true
System.out.println(isPalindrome(str2)); // true
System.out.println(isPalindrome(str3)); // false
```
阅读全文