介绍:
一个字符串从前往后读和从后往前读得到的是同样的字符串,这就是回文字符串。求一个字符串,从k开始,长度为L的字符串是否为回文字符串
分析:
1.直接截取从k开始长度为L的字符串
2.对这个字符串进行遍历,判断首尾是否相同,如果相同则继续遍历,有一个不同就返回false。
实现:
public class 回文字符串 {
public static void main(String[] args) {
System.out.print("该子段是否为回文字符串?答案:"+judgeHuiWen1("abbba",0,5));
}
//方法1
private static boolean judgeHuiWen1(String str, int start, int length) {
char arr[] = str.toCharArray();
int end = start + length -1;
if(start>str.length()||(start+length)>str.length()){//这里是对不合法输入的处理
System.out.println("输入的参数有问题");
return false;
}
//遍历整个字符串
for(int i=0;i<length;i++){
//当开始位置大于等于结束位置时,就说明已经遍历完毕,因为一个从头往后走,一个从后往前走。到中间就没必要再继续循环了。节约资源。
if(start>=end){
break;
}
//当arr[start]等于arr[end]的时候,就需要start++,end--,然后继续循环
if(arr[start] == arr[end]){
start++;
end--;
continue;
}else if(arr[start]!=arr[end]){
return false;
}
}
return true;
}
//方法2,和方法1差不多,只是方法1用的数组下标来获取字符,方法2用的字符串的charAt方法获取字符,原理相同。
private static boolean judgeHuiWen2(String str,int start,int length){
String newstr = str.substring(start,start+length);
int len = newstr.length();
for(int i=0;i<len;i++){
char a = newstr.charAt(i);
char b = newstr.charAt(len-1);
if(i>=len){
break;
}
if(a == b){
len--;
continue;
}else if(a != b){
return false;
}
}
return true;
}
总结:
我记得之前做过一道蓝桥杯的练习题,说是:求四到五位的回文数,并且各个位数的和为1-54之间的值。
我当时特别笨,因为不知道charAt这个方法,所以我疯狂的用for循环来嵌套,到最后我套了6层for循环,而且还没做出来。后来请教别人,知道了charAt()这个方法,只需要几行代码就可以实现。
所以还是得多看看api,没准里面的哪个方法可以直接解决我们的问题。