当前位置 : 主页 > 编程语言 > c语言 >

poj-1936

来源:互联网 收集:自由互联 发布时间:2023-09-03
#include iostream #include string using namespace std; void checkIfSubsequence(const string s, const string t) { if (s.length() == 0) { cout"Yes"endl; } if (t.length() s.length()) { cout"No"endl; } else { int sBegin = 0; int tBegin = 0; int


#include <iostream> 

 #include <string> 


 using namespace std; 


 void checkIfSubsequence(const string & s, const string & t) { 

     if (s.length() == 0) { 

         cout<<"Yes"<<endl; 

     } if (t.length() <  s.length()) { 

         cout<<"No"<<endl; 

     } else { 

         int sBegin = 0; 

         int tBegin = 0; 

         int slength = s.length(); 

         int tlength = t.length(); 

         for (; tBegin < tlength; tBegin++) { 

             // cout<<t[tBegin]<<" "<<s[sBegin]<<endl; 

             if (t[tBegin] == s[sBegin]) { 

                 sBegin++; 

                 if (sBegin == slength) { 

                     cout<<"Yes"<<endl; 

                     return; 

                 } 

             } 

         } 

         cout<<"No"<<endl; 

     } 

     return; 

 } 


 int main() { 

     while(1) { 

         string s = ""; 

         string t = ""; 

         cin>>s>>t; 

         if (cin.eof()) { 

             return 0; 

         } 

         checkIfSubsequence(s, t); 

     } 
}


C++ 16ms

水题, 没啥可说的。

就是判断一个字符串是不是另一个字符串的字串(注意的是, 不已经要求连续)。

思路很简单:

遍历字符串t, 然后和字符串s的某个字符进行比较(该字符是字符串s第一个没有被匹配的字符)。

直到t遍历完(如果s还没有匹配完则No)或者s匹配完(Yes).

要比匹配连续字串容易.

这个方法其实还可以进行优化:

记下t还有多少个字符没有遍历tl, s还有多少个字符没有匹配sl, 如果 sl > tl, 那么永远不可能匹配成功了, 直接NO.

这样在某些情况下可以大大减少运算次数.



上一篇:poj-1200
下一篇:没有了
网友评论