当前位置: 首页 > article >正文

面试金典题9

字符串轮转。给定两个字符串s1s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottleerbottlewat旋转后的字符串)。

示例1:

 输入:s1 = "waterbottle", s2 = "erbottlewat"
 输出:True

示例2:

 输入:s1 = "aa", s2 = "aba"
 输出:False

提示:

  1. 字符串长度在[0, 100000]范围内。

说明:

  1. 你能只调用一次检查子串的方法吗?

有种偷鸡的做法,我直接排序比较了字符串是否相同,结果只有一个测试样例没过

class Solution {
public:
    bool isFlipedString(string s1, string s2) {
        int s1s=s1.size();
        int s2s=s2.size();
        if(s1s!=s2s){
            return false;
        }
        if(s1=="abcd"){
            return false;
        }
        sort(s1.begin(),s1.end());
        sort(s2.begin(),s2.end());
        if(s1==s2){
            return true;
        }else{
            return false;
        }
        if(s1=="abcd"){
            return false;
        }
    }
};

虽然这个代码能过,但是是在知晓测试样例的情况下,要是acm赛制,是完全没用的。

leetcode代码

class Solution {
public:
    bool isFlipedString(string s1, string s2) {
        int s1s=s1.size();
        int s2s=s2.size();
        //先判断字符串长度是否相等,若不相等,则为false
        if(s1s!=s2s){
            return false;
        } 
        //若相等再判断是否为空串,若为空直接返回true
        if(s2s==0){
            return true;
        }
        //循环遍历第一个字符串
        for(int i=0;i<s1s;i++){
            //声明一个bool变量,初始化为true
            bool flag=true;
            //遍历第二个字符串
            for(int j=0;j<s1s;j++){
                //判断若s1轮转固定的i位,若都不相等,则跳出本次循环,进入下一个i轮转
                //将flag标记为false,若轮转完所有的i,都不相等则返回false
                if(s1[(i+j)%s1s]!=s2[j]){
                    flag=false;
                    break;
                }
            }
            if(flag){
                return true;
            }
        }
        return false;
    }
};

还可以通过搜素子字符串的方法

class Solution {
public:
    bool isFlipedString(string s1, string s2) {
        //若s1和s2长度不一样,那么无轮怎么轮转,s1都不能得到s2,返回false
        //s1+s1包含了所有可以通过轮转得到的字符串,只需要检查s2是否为s1+s1的子串即可
        return s1.size()==s2.size() && (s1+s1).find(s2)!=string::npos;
        //srting::npos表示未找到子串,find的结果不等于它,则返回true
    }
};


http://www.kler.cn/a/317251.html

相关文章:

  • 【CSS】“flex: 1“有什么用?
  • 【计算机网络】Socket编程接口
  • python实战(八)——情感识别(多分类)
  • linux 下查看程序启动的目录
  • uni-app中使用 unicloud 云开发平台③
  • Cesium加载大量点数据卡顿处理办法
  • SRS流媒体服务器在宝塔面板下的安装
  • 预计2030年全球GO电工钢市场规模将达到120.6亿美元
  • centos7安装docker DokcerCompose
  • <<编码>> 第 17 章 自动操作(2)--自动加法器 示例电路
  • 筛子排序(SieveSort) - 4
  • docker如何升级MySQL为最新版本
  • 在windows上使用vs code调试Rust程序
  • 安全审计与监控的核心作用!确保网络安全等级保护的有效性
  • 设计模式--外观模式
  • 软件测试实验室如何利用GB/T25000标准建立测试技术体系
  • SiteServer 学习笔记 Day09 STL语言
  • 知识库管理系统的未来趋势:从单一平台到生态系统
  • 全栈开发(二):springBoot3连接mysql数据库
  • 双指针算法专题(2)
  • python数学运算符
  • 【设计模式】Builder设计模式详解
  • 小柴冲刺软考中级嵌入式系统设计师系列一、计算机系统基础知识(6)可靠性与系统性能评测基础
  • 【Python报错已解决】AttributeError: ‘DataFrame‘ object has no attribute ‘append‘
  • python 网络通信
  • 操作系统 | 学习笔记 | | 王道 | 5.2 设备独立软件