• 字符串移位包含的问题(★)


    问题描述

    给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。

    样例输入

    AABCD CDAA
    ABCD ACBD

    样例输出

    true
    false

    代码

    #include <stdio.h>
    #include <string.h>
    
    bool search(char* src, char* des, int startIndex);
    
    int main(int argc, char** argv) {
        char src[100];
        char des[100];
        
        while(scanf("%s %s",src,des) != EOF)
        {
            int len = strlen(src);
            
            int index = 0;
            for(; index < len; ++index)
            {
                if (src[index] == des[0])
                {
                    bool success = search(src, des, index);    
                    if (success){
                        printf("true
    "); 
                        break;
                    }
                }
            }
            
            if (index == len)
            {
                printf("false
    ");
            }
            
        }
        
        return 0;
    }
    
    bool search(char* src, char* des, int startIndex)
    {
        int srcLen = strlen(src);
        int desLen = strlen(des);
        
        int index = 0;
        for(; index < desLen; ++index)
        {
            if (src[startIndex] == des[index])
            {
                ++startIndex;
                startIndex %= srcLen;
            } else {
                break;
            }
        }
        
        return index == desLen;
         
    }
    

    思路及代码说明

    1. startIndex %= srcLen;
      涉及到循环移动的地方,总能想起操作系统中“生产者——消费者”的模式。这种通过取余回到队列前端的方法,在逻辑上就像是将队列首尾相接。

    2. if (src[index] == des[0])
      用于加速。因为对 search 函数的封装,导致每次进入都要调用两次 strlen() 。减少对 search() 的调用应该能省那么一点点时间吧。

    3. 与那种复制一份 source 接到原来的 source 后面,并调用 strstr() 函数来判断是否包含的方法比起来,比较省空间。
      与那种真正将 src 数组循环移位的方法比起来,比较省时间。

  • 相关阅读:
    【DWT笔记】基于小波变换的降噪技术
    【DWT笔记】傅里叶变换与小波变换
    Matlab命令——目录操作(windows&Linux)
    【DCT笔记】DCT变换、DCT反变换、分块DCT变换
    JSOI2018 防御网络
    NOI2018 屠龙勇士
    CRT&EXCRT学习笔记
    CF662C Binary Table
    HNOI2017 礼物
    ZJOI2014 力
  • 原文地址:https://www.cnblogs.com/schaepher/p/6561736.html
Copyright © 2020-2023  润新知