网站加速器quickq怎样优化网站排名靠前
回文字符串
- 问题描述
- 代码
- 易错:
回文字符串
问题描述
小蓝最近迷上了回文字符串,他有一个只包含小写字母的字符串 S,小蓝可以往字符串 S 的开头处加入任意数目个指定字符: l、q、b(ASCII 码分别为: 108、113、98)。小蓝想要知道他是否能通过这种方式把字符串 S 转化为一个回文字符串。
输入格式
输入的第一行包含一个整数 T,表示每次输入包含 T 组数据。
接下来依次描述 T 组数据。
每组数据一行包含一个字符串 S
输出格式
输出 T 行,每行包含一个字符串,依次表示每组数据的答案。如果可以将 S 转化为一个回文字符串输出 Yes,否则输出 No。
样例输入
3
gmgqlq
pdlbll
aaa
样例输出
Yes
No
Yes
样例说明
对于 gmgqlq,可以在前面加上
qlq→qlqgmgqlq 转化为一个回文字符串;
对于 pdlbll,无法转化为一个回文字符串;
对于 aaa,本身就是一个回文字符串。
评测用例规模与约定
对于 50% 的评测用例, 1≤∣S∣≤1000,其中 ∣S∣ 表示字符串 S 的长度;
对于所有评测用例, 1≤T≤10,1≤∑∣S∣≤10 6
代码
注意全为特殊字符时的处理
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();String str = new String();String lbq = "lbq";sc.nextLine();//nextInt()不读空白符for (int i = 0; i < n; i++) {str = sc.nextLine();int len = str.length(), len1 = 0, len2 = 0;int left = 0, right = len - 1;while (right >= 0 && lbq.indexOf(str.charAt(right--)) != -1) {len2++;}while (left < right && lbq.indexOf(str.charAt(left++)) != -1) {len1++;}if (len1 > len2) {System.out.println("No");} else if (isPLR(str.substring(0, len - len2 + len1))) {System.out.println("Yes");} else {System.out.println("No");}}}public static boolean isPLR(String str) {int left = 0;int right = str.length() - 1;while (left < right) {if (str.charAt(left) != str.charAt(right)) {return false;}left++;right--;}return true;}
}
易错:
考虑不全面 虽然写成这样也可能会过 但 是运气好的
例如qmzmllq就会出错 应该是No但会输出Yes
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int t = scan.nextInt();while (t-- > 0) {String s = scan.next();System.out.println(f(s) ? "Yes" : "No");}}public static boolean f(String s) {int l = 0;int r = s.length() - 1;while (l < r) {if (s.charAt(l) == s.charAt(r)) {l++;r--;} else {if (s.charAt(r) == 'l' || s.charAt(r) == 'q' || s.charAt(r) == 'b') {r--;} else {return false;}}}return true;}
}