列表

详情


NC253. 旋转字符串(二)

描述

字符串旋转:
给定两个长度为n字符串A和B,如果能将A从中间某个位置分割为左右两部分字符串(不能为空串),并将左边的字符串移动到右边字符串后面组成新的字符串可以变为字符串B时返回true。
例如:如果A=‘youzan’,B=‘zanyou’,A按‘you’‘zan’切割换位后得到‘zanyou’和B相同,返回true。
再如:如果A=‘abcd’,B=‘abcd’,无法切成两个非空串,使得A换位后可以得到B,返回false。

数据范围:A,B字符串长度满足,保证字符串中仅包含小写英文字母和阿拉伯数字

示例1

输入:

"abcd","bcda"

输出:

true

示例2

输入:

"abcd","abcd"

输出:

false

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 2ms, 内存消耗: 388KB, 提交时间: 2021-09-05

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 旋转字符串
 * @param A string字符串 
 * @param B string字符串 
 * @return bool布尔型
 */
char* LeftRotateString(char* str, int n) {
        int len=strlen(str);
        char* rt=(char *)malloc(sizeof(char)*len+100);
        if(len==0)
            return rt;
        int i,index=0;
        for(i=n%len;i<len;i++)
        {
            rt[index++]=str[i];
        }
        for(i=0;i<n%len;i++)
        {
            rt[index++]=str[i];
        }
        return rt;
    }
bool solve(char* A, char* B ) {
    int len=strlen(A),i;
    char *p;
    for(i=1;i<len;i++)
    {
        p=LeftRotateString(B,i);
        if(strcmp(A,p)==0)
            return true;
    }
    return false;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-01-14

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 旋转字符串
     * @param A string字符串 
     * @param B string字符串 
     * @return bool布尔型
     */
    bool solve(string A, string B) {
        // write code here
        int al = A.size();
        int bl = B.size();
        int flag = 0;
        if(al!=bl){
            return false;
        }else{
              for(int i=0;i<al;i++){
                  for(int j=0;j<bl;j++){
                      if(A[i]==B[j]&&i!=j){
                          int temp = 1;
                          for(int k=1;k<al;k++){
                              if(A[(i+k)%al]!=B[(j+k)%al]){
                                  temp = 0;
                                  break;
                              }
                          }
                          if(temp==1){
                              flag = 1;
                          }
                      }
                  }
              }
            if(flag==1){
                return true;
            }else{
                return false;
            }
        }
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2021-08-27

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 旋转字符串
     * @param A string字符串 
     * @param B string字符串 
     * @return bool布尔型
     */
    bool solve(string A, string B) {
        int Na=A.size();
        int Nb=B.size();
        if(Na!=Nb){return false;}
        bool res=false;
        for(int i=1; i<Na; i++){
            string a=A.substr(i);
            a=a+A.substr(0,i);
            if(a==B){res=true; break;}
        }
        return res;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 400KB, 提交时间: 2021-08-04

class Solution {
public:
    /**
     * 旋转字符串
     * @param A string字符串 
     * @param B string字符串 
     * @return bool布尔型
     */
    bool solve(string A, string B) {
        int n = A.size();
        string c = (A+A).substr(1, n*2-2);
        return A.size() == B.size() && c.find(B) != string::npos;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 404KB, 提交时间: 2022-07-28

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 旋转字符串
     * @param A string字符串 
     * @param B string字符串 
     * @return bool布尔型
     */
    bool solve(string A, string B) {
        // write code here
        if(A.size()!=B.size())
        {
            return false;
        }

        char ch=B[0];
        int pos=A.find(ch);
        if(pos==0)
        {
            pos=A.find(ch,pos+1);
        }
        int start=0;
        while(pos!=A.npos)
        {
            string str1=A.substr(0,pos);
            string str2=A.substr(pos);
            if(str2+str1==B)
            {
                    return true;
            }
            start=pos+1;
            pos=A.find(ch,start);
        }
        return false;
    }
};

上一题