学习指引
- 序、专栏前言
- 序、专栏前言
- 一、【例题1】
- 1、题目描述
- 2、解题思路
- 3、模板代码
- 4、代码解析
- 三、推荐专栏
- 四、课后习题
序、专栏前言
本专栏开启,目的在于帮助大家更好的掌握学习Java
,特别是一些Java学习者
难以在网上找到系统地算法学习资料帮助自身入门算法
但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
算法的学习肯定不能缺少总结,这里我推荐大家可以到高校算法社区将学过的知识进行打卡,以此来进行巩固以及复习。
学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。
序、专栏前言
回文的判定是一个非常重要的内容,在任何地方都是一个很重要的考点。对于字符串的回文判定,使用双指针法进行判定是最简易的一种方法。它可以写成一个模板函数,非常简短,大家直接背下来进行使用即可。当然我们学习前也应该清楚回文的定义。
什么是回文串?
回文串的定义是一个字符串,从左往右读和从有右往左是一样的,比如等等。也就是有对称性质。 这里需要注意的是,当字符串的长度是奇数时,对于最中间的字符通常我们是无视的,它不影响我们对于回文的判断。比如上述说的
,
改成任何字符它都仍然是一个回文串。
一、【例题1】
1、题目描述
组测试数据,每次给定一个字符串
,字符串长度不超过
,请你判断它是否为回文串,如果是则输出
Yes
,否则输出No
。
2、解题思路
一种思路是根据回文的定义出发,我们使用
StringBuilder
倒叙获得字符串,判断得到的字符串与原字符串是否相等,相等则为回文串。
另一种思路的使用双指针,一个指针指向头另一个指向尾部,判定两个指针指向字符是否相同,如果不同说明不是回文串可以直接退出循环,否则指针同时向内移动,相等时退出循环。
3、模板代码
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
while (t-->0){
String s=sc.next();
System.out.println(check(s)?"Yes":"No");
}
}
static boolean check(String s){
StringBuilder sb=new StringBuilder();
for (int i = s.length()-1; i >=0 ; i--) {
sb.append(s.charAt(i));
}
return sb.toString().equals(s);
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
while (t-->0){
String s=sc.next();
System.out.println(check(s)?"Yes":"No");
}
}
static boolean check(String s){
int l=0,r=s.length()-1;
while (l<r){
if (s.charAt(l++)!=s.charAt(r--)) return false;
}
return true;
}
}
4、代码解析
两种方法均可,不过更加推荐第二种双指针的做法,这样在判断到非回文串时可以提前跳出循环,效率更高。而且不需要使用空间,推荐大家记住该模板。
课后习题
序号 | 题目链接 | 难度评级 |
1 | 回文数 | 1 |
2 | 有效的回文 | 2 |