β

ACM 题目解答:寄居蟹与海葵

ACM

Description
寄居蟹与海葵是一对合作互助的共栖伙伴。海葵是寄居蟹最称职的门卫。它用有毒的触角去蜇那些敢来靠近它们的所有动物,保护寄居蟹。而寄居蟹则背着行动困难的海葵,四出觅食,有福同享。
但并不是所有寄居蟹和海葵都可以做搭档的。那就要看海葵的身体是不是符合寄居蟹的螺壳。
海葵的身体是有褶皱的,而寄居蟹的螺壳同样凹凸不平,我们可以用一个大写字母组成的字符串来表示它们的高低程度,其中A代表0,B代表1,依次类推。我们称两者相加等于25的就算是吻合,比如A和Z相吻合,B与Y吻合,依次类推。
只要海葵身体的部分序列与寄居蟹外壳的序列相吻合,就称他们可以一起生活。

比如:
1.海葵的褶皱是”ABCDEFG”,寄居蟹是”ZYXWVUT”。这样,它们就可以完全吻合了。
2.海葵的褶皱是”AHBICJDKELFMGN”,寄居蟹是”ZYXWVUT”。这样,寄居蟹可以和海葵的部分序列”ABCDEFG”相吻合 (注意:部分序列不改变字符原来的先后顺序,比如”ACB”就不是它的部分序列)。
3.海葵的褶皱是”ABCD”,寄居蟹是”ZYXWVUT”。这样,虽然海葵可以和寄居蟹前面一段完全吻合,但它比寄居蟹要小,不能完全保护寄居蟹的安全,所有它们是不适合的。
4.海葵的褶皱是”HIJKLMNOPQ”,寄居蟹是”ZYXWVUT”。这样,它们就可以完全不吻合了。
现给你两段字符串S1、S2,分别代表海葵和寄居蟹的外壳,为了它们以后各都能快乐地生活,请你帮忙计算一下它们是不是吻合的。

Input
输入包括多组测试数据。
每组测试数据包括两个字符串H、J,分别代表海葵的外壳和寄居蟹的外壳。可以保证它们的长度都小于100000。
输入以0 0结束。
Output
如果寄居蟹和海葵的外壳能吻合,就输出”Yes”,否则输出”No”。
Sample Input


ABCDEFG ZYXWVUT
AHBICJDKELFMGN ZYXWVUT
ABCD ZYXWVUT
HIJKLMNOPQ ZYXWVUT
 0

Sample Output


Yes
Yes
No
No
import java.util.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Main {
    public static void main(String[] args) throws java.lang.Exception {
        Scanner s = new Scanner(System.in);
        while (s.hasNextLine()) {
            String line = s.nextLine();
            String[] words = line.split("\s+");
            if ("0".equals(words[0])) {
                return;
            }
            char[] x = words[0].toCharArray();
            char[] y = words[1].toCharArray();
            if (x.length < y.length) {
                System.out.println("No");
                continue;
            }
            boolean match = true;

            int nextI = 0;
            for (int j = 0; j < y.length; j++) {
                for (; nextI < x.length; nextI++) {
                    int i  = nextI;
                    if (((int)x[i]) + ((int)y[j]) != (int)'A' + (int)'Z') {

                        continue;
                    } else {
                        nextI = i + 1;
                        break;
                    }
                }
                if (nextI == x.length) {
                    if (j < y.length - 1) {
                        match = false;
                    }
                    break;
                }
            }
            if (match) {
                System.out.println("Yes");
            }else {
                System.out.println("No");
            }

        }

    }
}

相关的文章
  1. ACM 题目解答:FILE MAPPING
  2. ACM 题目解答:统计方案
  3. 五种不同的 URL 参数解析方法的性能比较
  4. Sample Page
  5. Scala 数据统计之 Hello World
ACM
作者:hellojinjie 的博客 | hellojinjie 的博客
Thought, Work, Life
原文地址:ACM 题目解答:寄居蟹与海葵, 感谢原作者分享。

发表评论