描述
给定一个长度为 n 的字符串,请编写一个函数判断该字符串是否回文。如果是回文请返回true,否则返回false。
字符串回文指该字符串正序与其逆序逐字符一致。
数据范围:0<n≤10000000<n≤1000000
要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
示例1
输入:
"absba"
复制返回值:
true
示例2
输入:
"ranko"
复制返回值:
false
方法一:直接查找法,依旧是来自本人的笨蛋方法
import java.util.*;
public class Solution {
public boolean judge (String str) {
int len = str.length();
for(int i = 0;i < len;i++){
if(str.charAt(i) == str.charAt(len-1-i))
continue;
else
return false;
}
return true;
}
}
字符串定位用 charAt方法。
方法二:反转比较法,直呼好妙
关于StringBuffer
String是一个不可变的字符序列
StringBuffer是可变的字符序列
优缺点:
“String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。String的操作都是改变赋值地址而不是改变值操作。
StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。”
原文链接:https://blog.csdn.net/weixin_44519467/article/details/103947361?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163678843416780264067287%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163678843416780264067287&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-103947361.first_rank_v2_pc_rank_v29&utm_term=StringBuffer&spm=1018.2226.3001.4187
import java.util.*;
public class Solution {
public boolean judge (String str) {
StringBuffer s1=new StringBuffer(str);
//反转
String s2 = s1.reverse().toString();
if(str.equals(s2))
return true;
else
return false;
}
}