描述
给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。
示例
输入:
"absba"
返回值:
true
方法一:双指针
设置两个指针分别位于字符串的开头和末尾,向左移动,向右移动,指针未相遇时,如果两指针所指向的值不相等直接返回,否则循环结束时返回.
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param str string字符串 待判断的字符串 * @return bool布尔型 */ public boolean judge (String str) { // write code here int start=0,end=str.length()-1; while(start<end) { //指针指向的字符不一样时就返回false if(str.charAt(start)!=str.charAt(end)){ return false; } start++; end--; } return true; } }
复杂度:
- 时间复杂度:字符串长度为,平均时间复杂度为
- 空间复杂度:未使用辅助空间,
方法二:调用reverse()函数
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param str string字符串 待判断的字符串 * @return bool布尔型 */ public boolean judge (String str) { // write code here String str2=new StringBuffer(str).reverse().toString(); return str.equals(str2); } }
复杂度:
- 时间复杂度:reverse函数的平均时间复杂度为
- 空间复杂度:辅助空间为,
方法三:利用栈
先将字符串中的字符逐个进栈,利用栈先进后出的特点,将字符逐个出栈并与字符串中的字符从头到尾逐个比较,不相等直接返回,否则循环结束返回.
代码如下
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param str string字符串 待判断的字符串 * @return bool布尔型 */ public boolean judge (String str) { // write code here Stack<Character>s=new Stack<>(); int i; for(i=0;i<str.length();i++) { char c=str.charAt(i); s.push(c); } for(i=0;i<str.length();i++){ if(s.pop()!=str.charAt(i)) return false; } return true; } }
复杂度:
- 时间复杂度:字符串长度为,平均时间复杂度为
- 空间复杂度:利用辅助栈,栈大小不超过,