码迷,mamicode.com
首页 > 其他好文 > 详细

子序列

时间:2017-03-14 23:57:18      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:tle   cout   bre   ==   nbsp   space   href   复杂   ret   

All in All

UVA - 10340
 
这题是参考书上的习题3-9。附上链接,题目意思也很简单,原题就不再重复了。
这题的解题思路需要一点灵感,直接从源串中删,需要考虑每次删哪些字符,这对于问题仅仅要求“能不能得到解”显然太复杂了。换一个角度来说,只要按照目标串的顺序完全出现了目标串的所有字符,即可以完成操作,反之则不能够完成。这样在一个循环内就可以完成程序。C++实现如下:
 
 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int p1, p2;
 6     char str1[1000000], str2[1000000];
 7     while (cin >> str2)
 8     {
 9         cin >> str1;
10         p2 = 0;
11         for (p1 = 0; str1[p1] != 0; p1++)
12         {
13             if (str2[p2] == str1[p1])
14             {
15                 p2++;
16             }
17             if (str2[p2] == 0)
18             {
19                 cout << "Yes\n";
20                 break;
21             }
22         }
23         if (str1[p1] == 0)
24             cout << "No\n";
25     }
26     return 0;
27 }

这题还有点坑爹的地方就是数组长度要开的足够大,一开始80 1000 都RE了,估计是数组越界,但是也没想到居然要给那么大(题也不给数据范围的提示),不得不看别人AC掉的程序才知道10^7的长度能确保AC。

子序列

标签:tle   cout   bre   ==   nbsp   space   href   复杂   ret   

原文地址:http://www.cnblogs.com/ggggg63/p/6551434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!