- 判断一个字符串是否是回文串
例如"abc"不是对称字符串,“aba”、“abba”、“aaa”、"mnanm"是对称字符串
package Q1;
import java.util.Scanner;
public class JudgeHuiwen {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
char[] x = s.toCharArray();
char temp;
for (int i = 0; i < x.length/2; i++) {
temp = x[i];
x[i] = x[x.length -1 - i];
x[x.length - 1 - i] = temp;
}
String reverse = String.valueOf(x);
if (s.compareTo(reverse) == 0)
System.out.println("Yes");
else
System.out.println("No");
}
}
- 统计大串中小串出现的次数
举例:在字符串” woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun”中java出现了5次
package Q2;
import java.util.Scanner;
public class Cal {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String sub = sc.nextLine();
int i = 0;
int index = 0;
int count = 0;
while(index != -1){
index = s.indexOf(sub, i);
count++;
i = index + 1;
}
//因为变成-1的那一轮count++仍会执行,所以要-1
count--;
System.out.println(count);
}
}
附加题:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
注意:如果有多个最长回文串,返回其中一个即可
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
package Q3;
import java.util.Scanner;
public class Find {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int start = 0;
int end = s.length() - 1;
//记录当前最长的回文子串
int max = 0;
String Max = new String();
//双重循环,遍历所有子串
for (; start < s.length() - 1; start++) {
for (; end > start; end--) {
String sub = s.substring(start, end + 1);//左闭右开,所以右边要用+1
if (Judge(sub) == 1) {
//找到更长的回文子串就记录下长度,并更新
if (end - start > max)
Max = sub;
//因为双循环是以不同开头区分,所以每个开头字符找到的第一个回文子串即为该字符开头的最长回文子串,找到即可退出内循环
break;
}
}
//内循环结束后,将end重置
end = s.length() - 1;
}
System.out.println(Max);
}
//判断是否为回文串
public static int Judge(String s) {
char[] x = s.toCharArray();
char temp;
for (int i = 0; i < x.length/2; i++) {
temp = x[i];
x[i] = x[x.length -1 - i];
x[x.length - 1 - i] = temp;
}
String reverse = String.valueOf(x);
if (s.compareTo(reverse) == 0)
return 1;
else
return 0;
}
}