360编程题2018_判断旅行方向

来源:互联网 发布:linux 网络编程本地ip 编辑:程序博客网 时间:2024/06/06 14:25

题目:小B在N市到M市之间旅行。途中时睡时醒。当她醒来注意到每个火车站都有一种颜色的旗帜,但是她看到的旗帜仅仅是经过的一小部分。小B在乘车过程中有两次清醒的时间。出站时,朋友们把N到M之间经过车站的旗帜颜色依次列出来,然后告诉你小B记得的旗帜颜色序列,让你判断小B究竟是从N和M之间哪些方向才能看到所说颜色的旗帜,还是根本就不可能看到?颜色用字母代表,相同的字母代表相同的颜色,不同的字母则表示不同的颜色。

输入:
多组测试数据,每组测试数据包含三行。
第一行:一个由小写拉丁字母构成的非空字符串,长度不超过10^5,表示N到M之间车站的颜色。火车从M向N运行时,经过的车站相同,只是方向相反。
第二行:小B在第一次睡醒时看到的颜色序列
第三行:小B在第二次睡醒时看到的颜色序列。
两个序列都是小写的拉丁字母构成的字符串,长度不超过100个字母。每个序列的颜色顺序排列按小B看到的时间顺序排列。

输出:
对每组测试数据,在单独的行中输出小B的旅行方向。
forward - 由N到M方向;
backward -由M到N方向;
both - 两种方向都有可能;
invalid - 不可能看到这样的颜色序列;

import java.util.Scanner;public class Main {    private static boolean contain(String a,String b,String c){        int num1 = a.indexOf(b);        if(num1 == -1)            return false;        else{            int num2 = a.lastIndexOf(c);            if( (num1+b.length()) <= num2 )                return true;            else                return false;        }    }    public static void main(String[] args)      {          Scanner scanner = new Scanner(System.in);          String[] input = new String[3];        //去掉while判断,程序运行时间会缩短,但是while可以连续运行程序        while(true){            System.out.println("请输入3行数据:");            for(int i = 0;i<3;i++)                input[i] = scanner.nextLine().trim();             StringBuilder nn = new StringBuilder();            String reverseAfter = nn.append(input[0]).reverse().toString();            boolean forward = contain(input[0], input[1], input[2]);            boolean backward = contain(reverseAfter, input[1], input[2]);            if(forward && backward)                System.out.println("both");            else if(forward && !backward)                System.out.println("forward");            else if(!forward && backward)                System.out.println("backward");            else                 System.out.println("invalid");            }      }}
原创粉丝点击