回文串判断
解法一:两头往中间扫描(时间复杂度为O(n),空间复杂度为O(1))
@Test
public void Demo3(){
char str[]={'A','B','B','A'};
IsPalindrome(str);
}
public boolean IsPalindrome(char[] str){
//判断是否为空串
if(str==null||str.length<1){
System.out.println("空串");
return false;
}
int start=0; //指向首部
int end=str.length-1;//指向尾部
while(start<end){ //表示从两边往中间遍历,如果start=end就结束遍历
if(str[start]!=str[end]){//不相等则表示不是回文串
System.out.println("不是回文串");
return false;
}
start++;//往后遍历
end--;//往前遍历
}
System.out.println("是回文串");
return true;
}
测试用例:
输入回文串:
char str[]={'A','B','B','A'};
输入空串
char str[]={};
输入带有非数字、字母
char str[]={' ','周','周',' '};
解法二:从中间往两端扫描(时间复杂度O(n),空间复杂度O(1))
public boolean IsPalindrome1(char[] str){
//空串
if(str==null||str.length<1){
System.out.println("空串");
return false;
}
int start;
int end;
if(str.length%2!=0){
start=(str.length)/2; //指向中间往左
end=start; //指向中间往右
}else{
start=(str.length)/2-1; //指向中间往左
end=(str.length)/2; //指向中间往右
}
while(start>=0){ //表示从两边往中间遍历,如果start=end就结束遍历
if(str[start]!=str[end]){//不相等则表示不是回文串
System.out.println("不是回文串");
return false;
}
start--;
end++;
}
System.out.println("是回文串");
return true;
}