The Japanese language is notorious for its sentence ending particles. Personal preference of such particles can be considered as a reflection of the speaker's personality. Such a preference is called "Kuchiguse" and is often exaggerated artistically in Anime and Manga. For example, the artificial sentence ending particle "nyan~" is often used as a stereotype for characters with a cat-like personality:
-
Itai nyan~ (It hurts, nyan~)
-
Ninjin wa iyada nyan~ (I hate carrots, nyan~)
Now given a few lines spoken by the same character, can you find her Kuchiguse?
Input Specification:
Each input file contains one test case. For each case, the first line is an integer N (2≤N≤100). Following are N file lines of 0~256 (inclusive) characters in length, each representing a character's spoken line. The spoken lines are case sensitive.
Output Specification:
For each test case, print in one line the kuchiguse of the character, i.e., the longest common suffix of all N lines. If there is no such suffix, write nai
.
Sample Input 1:
3
Itai nyan~
Ninjin wa iyadanyan~
uhhh nyan~
Sample Output 1:
nyan~
Sample Input 2:
3
Itai!
Ninjinnwaiyada T_T
T_T
Sample Output 2:
nai
解题思路:
题目大意:求某些字符串的最长公共后缀。
正向移动不好匹配,直接将字符串倒序。用两层for,外层移动字符串,内层匹配每个串在同一位置是否相等,相等则继续走,不等则退出,要通过判断最小字符串长度,防止字符串索引越界。
java代码:
import java.io.*;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String []str = new String[n];
for(int i = 0; i < n;i++) {
str[i] = new StringBuilder(br.readLine()).reverse().toString();
}
int min = str[0].length();
for(int i = 0; i < n; i++) {
int len = str[i].length();
if(len < min)
min = len;
}
boolean flag = true;
int index = 0;
int i;
for(i = 0; ;i++) {//字符串
for(int j = 1; j < n;j++) {
if(i < min) {
if(str[j].charAt(i) != str[j - 1].charAt(i)) {
flag = false;
index = i;//保存索引
break;
}
}else {//超出了最短长度,不能再匹配,会越界
flag = false;
index = i;
break;
}
}
if(!flag) {//匹配失败,退出外层循环
break;
}
}
if(i == 0) {//第一次就退出循环,证明一个字符也没匹配成功
System.out.println("nai");
}else {
String str1 = new StringBuilder(str[0].substring(0, index)).reverse().toString();
System.out.println(str1);
}
}
}
PAT提交代码: