1. 判断是否为回文字符串*
描述
给定一个长度为n的字符串(仅由小写字母组成),请编写一个函数,判断该字符串是否回文。如果是回文请返回true,否则返回false。
字符串回文指该字符串正序与其逆序逐字符一致。
数据范围: 0 < n < 1000000 0 < n < 1000000 0<n<1000000
要求:空间复杂度 O ( 1 ) O(1) O(1),时间复杂度 O ( n ) O(n) O(n)
知识点:字符串,双指针
示例1
输入:"absba"
返回值:true
示例2
输入:"ranko"
返回值:false
示例3
输入:"yamatomaya"
返回值:false
示例4
输入:"a"
返回值:true
思路: 回文字符即首尾相互往中靠,字符都是相等的。
解法思路:
第一种:利用StringBuilder的reverse();
第二种:采用双指针的方法。
解法一
思路:利用StringBuilder的reverse(),判断两个字符是否相等。
public boolean judge (String str) {
return new StringBuilder(str).reverse().toString().equals(str);
}
解法二
思路:双指针,一个正向遍历,一个逆向遍历,判断是否相同。
具体做法:
step1:准备两个指针,一个在字符串首,一个在字符串尾;
step2:在首的指针往后走,在尾的指针往前走,依次比较路过的两个字符是否相等,若不相等,直接返回false;
step3:直到两个指针在中间相遇,都还一致,就是回文,返回true。
public boolean judge (String str) {
int left = 0;
int right = str.length() - 1;
while (left < right) {
if (str