zoukankan      html  css  js  c++  java
  • 每天一道算法题(29)——检测字符串的是否由移位得到

    题目: 

           字符串ABCD,可以由字符串BCDA或者CDAB通过循环移位而得到。请编程实现以下检测:字符串S1是否可以由字符串S2通 过循环移位而得到。


    思路:

          1.不涉及字符串拷贝,只通过指针移位匹配字符串。

          2.遍历s1的所有移位形式,只要有一种形式匹配s2则退出。


    代码:

    #include"iostream"
    using namespace std;
    
    bool cmp(const char* p1,const char *p2,int len){//依据特定长度,匹配两段字符串
    	if((!p1&&!p2)||(len==0))//注意长度为“0的时候匹配成功”
    		return true;
    	if(!p1||!p2||len<0)
    		return false;
    
    	int i=0;
    	while(i<len&&*(p1+i)==*(p2+i))
    		i++;
    	if(i==len)
    		return true;
    	else 
    		return false;
    }  
    bool decision(const char* p1,const char* p2){//判决函数
    	if(!p1&&!p2)
    		return true;
    
    	if(!p1||!p2)
    		return false;
    
    	if(strlen(p1)!=strlen(p2))
    		return false;
    	int k=strlen(p1);
    	for(int i=0;i<k;i++){
    		if(cmp(p1+i,p2,k-i)&&cmp(p1,p2+k-i,i))
    		   return true;
    	}
    	return false;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char p1[]="ABCD";
    	char p2[]="BCDA";
    
    	if(decision(p1,p2))
    		cout<<"true"<<endl;
    	else
    		cout<<"False"<<endl;
    }


  • 相关阅读:
    微信小程序自定义navigationBar
    微信小程序-自动定位并将经纬度解析为具体地址
    a conexant audio couldnot befound
    平衡二叉树(AVL)java实现
    二叉树的各种非递归遍历
    选择排序
    快速排序
    冒泡排序
    数组洗牌
    haffman树c实现
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5392992.html
Copyright © 2011-2022 走看看