• CRB and String


                            

               CRB and String

    题目抽象:给你两个字符串s,t;  每次你可以从s中任选一个字符,再其后插入一个与该字符不相等的字符。经过一定的操作,是否可以是s变成t.

    分析:插入一些字符,s要变成t,那么一定要满足s是t的子序列。在此基础上, 如果s[i] != t[j], 那么如果s[i-1] != t[j]或者 k>= 1, s[k -1 ] != s[k], s[k] == s[k+1] == ... == s[i]  ,那么可以插入相应的字符。如果k < 1,那么就不能在第二种情况中插入,那么这就要求,k  t[0] == t[1] == ... ==t[k], s[0->k] ==t[0->k]

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <string>
     7 #include <vector>
     8 #include <set>
     9 #include <map>
    10 #include <queue>
    11 #include <stack>
    12 #include <cstdlib>
    13 #include <sstream>
    14 using namespace std;
    15 typedef long long LL;
    16 const LL INF = 0x5fffffff;
    17 const double EXP = 1E-9;
    18 const LL MOD = (LL)1E9+7;
    19 const int MS = 100005;
    20 
    21 char s[MS], t[MS];
    22 
    23 //  s can convert to t
    24 // 1: s is subsequence of t
    25 // 2: k t[0] == t[1] == ……== t[k]  s[0->k] == t[0->k]
    26 
    27 int main() {
    28     int T;
    29     scanf("%d",&T);
    30     while (T--) {
    31         scanf("%s%s", s, t);
    32         int len1 = (int)strlen(s);
    33         int len2 = (int)strlen(t);
    34         if (len1 >= len2) {
    35             if (strcmp(s, t) == 0)
    36                 printf("Yes
    ");
    37             else
    38                 printf("No
    ");
    39             continue;
    40         }
    41         int k = 0;
    42         while (k < len2 && t[k] == t[k + 1])
    43             k++;
    44         int ok = 1;
    45         for (int i = 0; i <= k; i++) {
    46             if (i > len1 -1 || s[i] != t[i]) {
    47                 ok = 0;
    48                 break;
    49             }
    50         }
    51         if (!ok) {
    52             printf("No
    ");
    53             continue;
    54         }
    55         int s1 = k;
    56         int s2 = k;
    57         while (s1 < len1 && s2 < len2) {
    58             while (s2 < len2 &&s[s1] != t[s2]) {
    59                 s2++;
    60             }
    61             if (s2 < len2) {
    62                 s1++;
    63                 s2++;
    64             }
    65             else {
    66                 ok = 0;
    67                 break;
    68             }
    69         }
    70         if (ok)
    71             printf("Yes
    ");
    72         else
    73             printf("No
    ");
    74     }
    75     return 0;
    76 }
  • 相关阅读:
    [转]HTTP请求模型和头信息参考
    括号匹配算法
    SQL LEFT JOIN 关键字 (转)
    Vim学习资料汇总
    与图相关的算法
    关于字符串的一些算法
    Huffman编码
    迅雷开放了下载引擎
    ubuntu下《UNIX环境高级编程》(apue.h)编译出错的处理方法
    学习unix信号
  • 原文地址:https://www.cnblogs.com/767355675hutaishi/p/4746220.html
Copyright © 2020-2023  润新知