检查给定句子中,子串S2的任何出现后是否出现子串S1

检查给定句子中,子串s2的任何出现后是否出现子串s1

在这个问题中,我们需要检查子字符串S1是否出现在给定字符串S中子字符串S2的任何出现之后。我们可以比较S1和S2在字符串S中的起始索引来解决这个问题。 p>

问题陈述——我们给出了三个子字符串,名为 S、S1 和 S2。字符串 S 始终包含 S1 作为子字符串。我们需要检查给定字符串 S 中子字符串 S1 是否出现在子字符串 S2 出现之后。

示例

输入– S =“abxtutorialspointwelcomepoint”,S1 =“欢迎”,S2 =“点”;

输出 – 是

解释 – 在字符串 S 中,“point”子字符串出现了 2 次。一个在“欢迎”之前,另一个在“欢迎”之后。所以,我们可以说字符串 S1 出现在字符串 S2 的任何出现之后

输入–   S = “abcdefgh”, S1 = “abcd”, S2 = “gh”;

输出 – 否

解释S1位于字符串S的开头。因此,S1不会出现在子字符串S2之后。

输入– S =“abce”,S1 =“bc”,S2 =“xy”;

输出 – 否

说明 – 由于字符串 S2 不存在于字符串 S 中,因此打印 No。

方法 1

在这种方法中,我们将找到 S2 子字符串的所有起始索引并将它们存储在集合中。之后,我们将得到S1的起始索引。我们将 S2 的每个起始索引与 S1 的起始索引进行比较,如果我们发现集合中的任何值小于 S2 的起始索引,则可以说子字符串 S1 出现在子字符串 S2 的任何出现之后。

算法

定义存储子串S2起始索引的集合。

使用 find() 方法查找 S2 子字符串的第一个起始索引。

使用while循环获取子字符串S2的所有起始索引,并使用insert()方法将它们存储到集合中。

遍历设定值。如果任何值小于给定字符串 S 中子字符串 S1 的起始索引,则返回 true。

最后返回 false。

示例

#include #include #include using namespace std;bool isS1AfterS2(string& S, string& S1, string& S2) {   // set to store indices of S2 in S   unordered_set indices;   // Find all occurrences of S2 in S, and store them in set   size_t found = S.find(S2);   while (found != string::npos) {      indices.insert(found);      found = S.find(S2, found + 1);   }   // Compare starting indices of S1 with S2   for (const int& index : indices) {      if (index < S.find(S1)) {          return true;  // S2 appears before S1      }   }   return false;  // S1 appears before or at the same position as S2}int main(){   string S = "abxtutorialspointwelcomepoint";   string S1 = "welcome", S2 = "point";   if(isS1AfterS2(S, S1, S2)) {          cout << "Yes, string S1 appears after string S2.";   } else {       cout << "No, string S1 does not appear after string S2.";   }   return 0;}

输出

Yes, string S1 appears after string S2.

时间复杂度 – O(N*K),因为我们需要找到字符串 S2 的起始索引。

空间复杂度 – O(N),因为我们存储字符串 S2 的起始索引。

方法2

在这种方法中,我们将遍历字符串。如果我们发现 S2 在 S1 出现之前出现,则返回 true,因为字符串 S 始终包含字符串 S1。

算法

定义len、n1和n2变量来存储变量的长度。

开始遍历字符串。

定义‘temp 字符串,并使用从第 i 个索引开始的长度为 n2 的子字符串对其进行初始化。

如果 temp == S2,则返回 true。

从第 i 个索引开始取长度为 n1 的子字符串。如果 temp == s1,则返回 false。

最后返回true。

示例

#include using namespace std;bool isS1AfterS2(string &S, string &S1, string &S2){   // store the length of the strings   int n1 = S1.size(), n2 = S2.size();   // Traverse the string S from left to right   for (int i = 0; i <= S.size() - n2; i++){      // temporary string to store substring      string temp;      // get the substring      temp = S.substr(i, n2);      // if we find the string S2, return true as s1 always present in s.      if (temp == S2){          return true;      }      temp = S.substr(i, n1);      // If we find s1 before s2, return false      if (temp == S1){          return false;      }   }   return true;}int main(){   string S = "abxtutorialspointwelcome";   string S1 = "welcome", S2 = "point";   if(isS1AfterS2(S, S1, S2)) {      cout << "Yes, string S1 appears after string S2.";   } else {       cout << "No, string S1 does not appear after string S2.";   }   return 0;}

输出

Yes, string S1 appears after string S2.

时间复杂度 – O(N*min(n1, n2)),因为我们找到长度为 n1 和 n2 的子字符串。

空间复杂度 – O(min(n1, n2),因为我们存储子字符串。

在第一种方法中,我们使用集合来存储S2的起始索引,这比第二种方法的代码需要更多的空间。第二种方法的代码比第一种方法更具可读性。另外,程序员可以尝试解决检查子串S2是否出现在S1出现之后的问题。

以上就是检查给定句子中,子串S2的任何出现后是否出现子串S1的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1443395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 20:04:03
下一篇 2025年12月13日 10:16:01

相关推荐

  • C# 数组作为参数传递出现的问题解决

    原则:尽可能控制对数据的修改,如果可以预测某个数据不会或不应该被改变,就要对其控制,而不要期望使用这个数据的调用者不会改变其值。 如果参数在使用过程中被意外修改,将会带来不可预知的结果,而且这种错误很难被检查到,所以我们在设计方法参数的时候,要充分考虑传递引用类型参数或者引用方式传递引用类型参数可能…

    好文分享 2025年12月17日
    000
  • MYSQL 出现Error 1045 access denied 原因与解决方法(1/2)

    MYSQL 出现Error 1045 access denied 原因与解决方法

    数据库 2025年12月2日
    000
  • Python怎么统计字母出现的次数

    这次给大家带来Python怎么统计字母出现的次数,Python统计字母出现次数的注意事项有哪些,下面就是实战案例,一起来看一下。 题目: 统计一个文件中每个单词出现的次数,列出出现频率最多的5个单词。 前言: 这道题在实际应用场景中使用比较广泛,比如统计历年来四六级考试中出现的高频词汇,记得李笑来就…

    2025年11月28日
    000
  • 检查Linux上SSH的版本的步骤

    Linux中SSH版本检查步骤 Secure Shell(SSH)是一种网络协议,用于安全地在网络上建立远程连接。在Linux系统中,SSH扮演着非常重要的角色,因为它是管理和维护远程服务器的标准方式。为了确保服务器的安全性,我们需要了解服务器上正在运行的SSH版本。下面将详细介绍在Linux系统中…

    2025年11月27日 运维
    100
  • 如何在Linux系统中检查端口是否被占用

    在Linux系统中检查端口是否被占用是一个常见的操作,可以通过使用一些命令和工具来实现。以下是一些常用的方法和具体的代码示例: 使用netstat命令检查端口占用情况:netstat命令是一个用来显示网络状态信息的工具,可以通过以下命令来检查指定端口是否被占用: netstat -tuln | gr…

    2025年11月25日 运维
    000
  • Linux如何检查防火墙是否启用

    检查firewalld:systemctl status firewalld或firewall-cmd –state,显示running则启用;2. 检查ufw:ufw status,active表示启用;3. 检查iptables:sudo iptables -L,有规则列出说明已配置…

    2025年11月24日 运维
    100
  • Linux SSH版本检查方法详解

    【标题】Linux SSH版本检查方法详解 SSH(Secure Shell)是一种用于远程登录和执行命令的网络协议,常用于Linux系统上。随着技术的不断发展,SSH协议也不断更新升级,而检查SSH版本是保证系统安全的重要一环。本文将详细介绍Linux下检查SSH版本的方法,并附上具体的代码示例。…

    2025年11月19日
    000
  • Oracle存储过程中如何检查表是否存在

    在Oracle%ignore_a_1%中如何检查表是否存在 在Oracle数据库中,对于开发人员来说经常需要编写存储过程来完成一些复杂的业务逻辑。在编写存储过程时,有时需要在程序中判断某张表是否存在,以便根据表是否存在来执行不同的操作。本文将介绍在Oracle存储过程中如何检查表是否存在,并提供具体…

    2025年11月16日
    000
  • SQLSERVER中分发或合并代理中出现ID标识满阈值处理方法

    SQLSERVER中分发或合并代理中出现ID标识满阈值处理方法 sp_adjustpublisheridentityrange , ,   SQLSERVER中分发或合并代理中出现ID标识满阈值处理方法 慧中标AI标书 慧中标AI标书是一款AI智能辅助写标书工具。 120 查看详情 sp_adjus…

    2025年11月9日
    500
  • 检查 2台电脑sql 数据同步冲突 的sql语句

    国外的服务器跟国内的服务器 同步有时会冲突,原因很多。如网路 不畅通。没及时更新数据 EXECdistribution..sp_replmonitorhelppublisher 然后加上 飞信短信,就能及时 知道 关键数据不同步情况 国外的服务器跟国内的服务器 同步有时会冲突,原因很多。如网路 不畅…

    数据库 2025年11月9日
    600
  • 安装Oracle或运行dbca出现ORA-00922和ORA-28000错误

    安装Oracle过程中(或者运行dbca命令)跳出来一个对话框ora-00922(缺少或无效选项),此时可以选择忽略和取消。如果选择了忽略就会出现ora-28000错误(账户已锁定) 此为设置sys等系统账号密码时,输入了特殊字符,密码应该采用大写英文+小写英文+数字方式, 安装Oracle过程中(…

    数据库 2025年11月8日
    000
  • CentOS下Oracle安装

    检查系统环境 grep MemTotal /proc/meminfo #检查物理内存 grep SwapTotal /proc/meninfo #检查交换空间 df -k #检查磁盘 安装Oracle需要的环境 yum install -y binutils compat-db compat-lib…

    数据库 2025年11月8日
    100
  • 用root用户登陆PHPmyAdmin出现Client does not support authenti

    这样处理: 开始–mysql–mysql command line client 输入root用户的密码,然后输入: set password for root@localhost=OLD_PASSWORD(root用户的密码); 输入exit; 退出后,就可以正常登陆PHP…

    数据库 2025年11月7日
    100
  • 重装mysql出现无法start service的问题的解决方法

    could not start the service MySQL .error 0 安装时无法启动服务 在MySQL数据库卸载后重装时,一定要将MySQL的相关服务,文件夹,注册表删除彻底  重装前的步骤: 1.打开service.msc关闭mysql服务 2.控制面板  ->  程序和功能…

    2025年11月6日
    000

发表回复

登录后才能评论
关注微信