今天做某公司的在线笔试题,出现一个题目,意思是小明做车旅行时,途中醒了两次,每一次都看到了一些车站的颜色,用小写英文字母表示为两个字符串,现在同伴告诉小明整个过程中的所有车站的颜色排列,问是过去的途中还是回来的时候
抽象出来的意思是给三个字符串,str1,str2,str3,判断str2和str3在str1中的出现顺序。举例如下:
例1
输入:
abcdef
bc
f
输出:
forward
说明:forward表示bc和f在字符串abcdef中是正序出现的
例2
输入:
aabcdcaa
aa
cd
输出:
both
输出说明:因为aa和cd在字符串aabcdcaa中可以正序出现,也可以反序出现(将str1反转得到aacdcbaa,字符串aa和cd在该字符串中也顺序出现了)
如果正序出现,输出forward,反序出现,输出back,如果正序和反序都可以,输出both。如果都不可以,输出invalid
其实就是在str1正序的时候判断一遍,然后再将str1反序,再判断一遍。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
String str1 = scan.nextLine();
String str2 = scan.nextLine();
String str3 = scan.nextLine();
System.out.println(solve(str1, str2, str3));
}
}
public static String solve(String str1, String str2, String str3) {
String res = "";
int r = str1.indexOf(str2);
String newstr = str1.substring(r + str2.length());
if (newstr.contains(str3)) {
res = res + "forward";
}
String revstr = new StringBuilder(str1).reverse().toString();
int l = revstr.indexOf(str2);
String mystr = revstr.substring(r + str2.length());
if (mystr.contains(str3)) {
res = res + "back";
}
if (res.equals("")) {
res = "invalid";
}
if (res.equals("forwardback")) {
res = "both";
}
return res;
}
}