检查任意字符串的左移和右移是否会得到给定的字符串

检查任意字符串的左移和右移是否会得到给定的字符串

字符的集合由字符串数据类型表示。它使用字母、数字、符号和空格进行逻辑排列。大多数计算机语言使用单引号或双引号将字符串括起来,以区分它们与其他数据类型。

程序员经常使用字符串来进行一些输入和输出操作,存储和操作文本数据等。字符串的一些常见操作包括拼接(将两个或多个字符串合并)、提取子字符串(获取字符串的一部分)以及在字符串中搜索特定字符或模式。

方法

我们可以使用以下方法来确定字符串的左移右移结果是否为每个字符串−

方法1. 暴力破解法 −

方法2. 检查子字符串 −

方法1:暴力破解法

使用暴力法,生成输入字符串的所有左移和右移,并将每个字符串与目标字符串进行比较。该方法的时间复杂度,其中n是字符串的长度,为O(n2)。

语法

遍历原始字符串的所有可能的左移和右移,并将它们与给定的字符串进行比较,这是确定任何字符串的左移和右移是否会得到给定字符串的蛮力方法。这种策略的一般语法如下所示−

string_shift_check (original_string, given_string):   n = length of original string   for int i from 0 to n-1:      left shift = original string[i:n] + original string[0:i]      right shift = original string[n-i:n] + original string[0:n-i]      if left shift == given string or right shift == given string:         return True   return False

算法

确定一个字符串的左右移是否得到了给定的字符串的蛮力方法是测试字符串的每一个可能的移位,并确定是否有任何一个移位适合给定的字符串。算法如下−

步骤 1 − 开始时将一个变量初始化为0,表示当前的移位计数。

第二步 – 当移位数小于字符串长度时 –

将字符串左移,将第一个字符移到字符串的末尾。

验证移位后的字符串是否与提供的字符串匹配。如果匹配,则给出真实答案。

通过将最后一个字符移到开头,对字符串进行右移。

验证移位后的字符串与提供的字符串是否匹配。如果匹配,给出真答案。

将移位计数增加1。

第三步 – 在尝试了每个可能的移位后,如果没有找到匹配,则返回false。

Example 1

的中文翻译为:

示例 1

这个实现说明函数Shifted String接收两个字符串参数s和target,并返回一个布尔值结果,指示target是s的左移还是右移。

在确定目标是否是s的移位版本之前,函数首先确认两个字符串的长度是否相等。之后,它通过组合每个可能的移位位置之前和之后的子字符串来构建新的字符串。如果左移或右移的字符串在所需字符串中相似,则该方法返回true。如果不是这种情况,则返回false。

在主函数中,我们定义了两个示例字符串s和target,并利用这些字符串调用了Shifted String方法。程序然后指示target是否是s的移位形式。

#include #include using namespace std;bool isShiftedString(string s, string target) {   if(s.length() != target.length()) {      return false;   }   int n = s.length();   for(int i = 0; i < n; i++) {      string leftShift = s.substr(i) + s.substr(0, i); // left shift the string      string rightShift = s.substr(n-i) + s.substr(0, n-i); // right shift the string      if(leftShift == target || rightShift == target) {         return true;      }   }   return false;}int main() {   string s = "abcde";   string target = "cdeab";   if(isShiftedString(s, target)) {      cout << "The string is shifted." << endl;   } else {      cout << "The string is not shifted." << endl;   }   return 0;}

输出

The string is shifted.

方法二:检查子字符串

要确定较小的字符串是否是较长字符串的一部分,可以采用“检查子字符串”的方法。这个过程涉及将与较小字符串相同长度的各个子字符串与较小字符串本身进行比较,同时遍历较长字符串。如果两个字符串匹配,这就确认了较短的字符串确实是较大文本的一个子集。为了增加这篇文章的复杂性和句子长度的变化,这个想法应该被分解成简单而又引人入胜的部分。

语法

以下语法可用于确定任何字符串的左移和右移是否导致提供的字符串 –

if (string_to_check_in.find(substring_to_check) != -1):   //Substring found in string, so it is a left or right shiftelse:   //Substring not found, so it is not a left or right shift

算法

以下算法用于确定字符串的左移和右移是否产生所提供的字符串 −

步骤 1 – 开始输入输入字符串和目标字符串。

第2步 – 验证输入字符串的长度和目标字符串的长度是否相等。如果不相等,则返回False。

步骤3 − 要构建一个新的序列,输入字符串必须与输出字符串合并。

第四步 – 需要进行比较,以确认输入字符串是否包含在新构建的序列中。

步骤 5 – 如果两个字符串完全相同,则答案将是不容置疑的;相反,答案将是否定的。

Example 2

的中文翻译为:

示例2

这是一个C++代码,用于判断左移和右移任意字符串是否会产生给定的字符串 –

此示例研究了两个数组s1和s2之间的连接,以观察它们是否共享任何相似的字符串。通过坚持s1和s2的长度需要相同的前提,它们被合并为一个名为”s1s1″的数组。进一步对该数组进行分析,以确定是否可以找到s2的一部分,搜索的结果将输出”true”或”false”。这种技术提供了对关联的基本反应,用于进一步评估s1和s2的左右字段,以确认两个数组之间的关联。

#include #include using namespace std;bool checkForSubstring(string s1, string s2) {   if (s1.length() != s2.length()) {      return false;   }       string s1s1 = s1 + s1;       if (s1s1.find(s2) != string::npos) {      return true;   }       return false;}int main() {   string s1 = "abcd";   string s2 = "cdab";       if (checkForSubstring(s1, s2)) {      cout << "Yes, left or right shift of string " << s1 << " results in " << s2 << endl;   } else {      cout << "No, left or right shift of string " << s1 << " does not result in " << s2 << endl;   }   return 0;}

输出

Yes, left or right shift of string abcd results in cdab

结论

我们得到了一个字符串用于这个主题,我们需要确定这个字符串是否可以通过反复应用左移和右移来生成。

将提供的字符串与自身连接起来,并确定新字符串是否保留了原始字符串,这样可以解决这个问题。如果是的话,对字符串本身执行左移和右移操作将得到原始字符串。

作为一种替代方案,我们可以遍历每个移位位置,看看是否有任何移位后的字符串与输入字符串匹配。

解决方案的时间复杂度在这两种情况下都是O(n2),其中n是字符串的长度。ft和任何字符串的右移都会导致给定的字符串−

以上就是检查任意字符串的左移和右移是否会得到给定的字符串的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:25:21
下一篇 2025年12月17日 22:25:33

相关推荐

  • 在C程序中,字符串的字母数字缩写是什么?

    在这里,我们将看到一个与给定字符串的字母数字缩写相关的有趣问题。字符串长度小于10。我们将打印出所有的字母数字缩写。 字母数字缩写是由字符和数字混合形成的。该数字的值是被省略的字符数。可能有任意数量的被省略的子字符串。没有两个子字符串是相邻的。让我们看一下获取这个概念的算法。 算法 printAbb…

    2025年12月17日
    000
  • 检查字符串的字符是否可以通过替换’_’来变得非递减

    在本文中,我们将深入探讨字符串操作领域中一个有趣的问题:如何通过替换“?”字符来检查给定字符串的字符是否可以变为非递减顺序。这个问题为您提供了一个练习C++中字符串操作和条件检查技巧的绝佳机会。 Problem Statement Given a string consisting of alpha…

    2025年12月17日
    000
  • 将以下内容翻译为中文:C++程序将字符串转换为浮点数

    C++ 中使用静态类型。为了编写程序,变量必须定义为特定类型。有时必须读取来自控制台或文件的输入。在这种情况下,程序被赋予字符串数据。需要特殊操作才能将它们转换为其他数据类型。本文将提供将字符串转换为浮点整数的 C++ 方法。可以使用几种不同的方法来实现此目的。分别探索它们中的每一个。 在 C++ …

    2025年12月17日
    000
  • 使用C++从字符串中删除给定的单词

    在本文中,我们将解决从给定字符串中删除给定单词的问题。例如 – Input : str = “remove a given word ”, word = “ remove ”Output : “ a given word &rd…

    2025年12月17日
    000
  • 二进制字符串的字典序排名

    在本文中,我们将探讨一个涉及二进制字符串和词典序的有趣问题。我们的任务是找到给定二进制字符串的词典序排名。我们将使用C++来演示我们的解决方案,C++是一种以其高效性和灵活性而闻名的流行编程语言。 理解词典顺序 词典顺序(也称为字母顺序或字典顺序)是指根据单词的组成字母的字母顺序排列单词。 问题陈述…

    2025年12月17日
    000
  • 安排一个二进制字符串,以在索引范围内获得最大值。C/C++?

    对于一个由0和1组成的给定字符串,我们给出了M个不相交的范围A,B(A 活动是找到一个合法或有效的排列,同时满足以下两个条件− 所有M个给定范围之间的数字之和最大。 字符串将是字典序最大的。字符串1100的字典序比字符串1001高。 立即学习“C++免费学习笔记(深入)”; 示例 Input1110…

    2025年12月17日
    000
  • 重新排列一个字符串,以最大化任意一对元音字母之间的最小距离

    在本文中,我们将从字符串操作领域解开一个有趣的问题:“重新排列字符串以最大化任何一对元音之间的最小距离”。这个问题挑战我们操纵字符串中字符的排列,以确保任意两个元音字符之间的最大可能的最小距离。我们将详细讨论该问题,提供 C++ 代码实现,并举例说明。 理解问题陈述 给定一个字符串,任务是重新排列字…

    2025年12月17日
    000
  • 给定一个字符串,其中字母的表示方式被打乱的数字

    在今天的文章中,我们将深入探讨与C++中字符串操作相关的一个独特问题。这个问题是“在给定字符串中,字母表达式被打乱的数字。” 这个问题可以作为一个很好的练习,来提高你在C++中的字符串操作和数据结构技能。 问题陈述 给定一个字符串,任务是识别其中字母表达方式被打乱的数字。例如,如果输入字符串是&#8…

    2025年12月17日
    000
  • 使用C++程序将字符串中的所有辅音替换为最近的元音

    该方法旨在用字母表中最接近的元音(也称为小写拉丁字母)替换一串辅音。如果两个元音同样接近,我们可以用这些字母中的第一个元音来替换它们。 让我们来看一些输入场景 – 假设我们有一个字符串,比如“ebgkjasjd”,现在我们需要将字符串中所有出现的辅音字母替换为最近的元音字母。 Input…

    2025年12月17日
    000
  • 将给定的字符串转换为T,通过任意次数替换字符串之间的字符

    转换字符串意味着我们必须根据给定条件将其与给定字符串相同。在这个问题中,我们给出了一个由字符串“arr”和大小为“M”的字符串“T”组成的数组。我们的任务是检查是否可以通过从数组的字符串( arr[i] )中删除任何字符并将该字符插入到另一个字符串的任何索引中来使数组中存在的所有字符串与给定的字符串…

    2025年12月17日
    000
  • 将字符串A所需附加的最小子序列以获得字符串B

    在这个问题中,我们需要使用str1的子序列来构造str2。为了解决这个问题,我们可以找到str1的子序列,使其能够覆盖最大长度为str2的子串。在这里,我们将学习两种不同的方法来解决问题。 问题陈述 – 我们给出了两个不同长度的字符串:str1 和 str2。我们需要按照以下条件从 str1 构造 …

    2025年12月17日
    000
  • 检查字符串是否包含连续的字母,并且每个字母只出现一次

    Introduction 在C++中,字符串是一系列的字符,这些字符可以是不同的或重复的。连续的字符是同时出现的字符,它们之间的差值为1。例如,字符a和b是连续的,因为它们一起出现。然而,字符m和o在它们的位置上有一个差值为2,使它们不是连续的。 在本文中,我们将开发一段代码,该代码将以字符串作为输…

    2025年12月17日
    000
  • 加密字符串

    加密是一种通过使用某些技术或某些步骤来更改数据的技术,使其更改为另一种信息或无法直接从中收集到先前的信息。对于加密,我们必须遵循针对特定加密类型固定的某些步骤。 在这个问题中,我们将得到一个字符串,我们必须按照给定的步骤对其进行加密 – 首先,我们必须获取包含相同字符的所有子字符串,并将…

    2025年12月17日
    000
  • 在C语言中编写一个程序,用于检查一个字符串是否包含任何特殊字符

    给定一个字符串 str[],任务是检查字符串是否包含任何特殊字符,如果字符串有特殊字符,则打印“字符串不被接受”,否则打印“字符串被接受”。 特殊字符是那些既不是数字也不是字母的字符,即 – !@#$%^&*()+=-][‘;/.,{}|:”?`~ 因此,在C编程语言…

    2025年12月17日
    000
  • 查询字符串A中是否存在字符串B作为子字符串

    介绍 In this tutorial, we will see queries to check if string B exists as a substring of string A. A substring is a string that is part of the main stri…

    2025年12月17日
    000
  • 使用STL实现给定字符串的C++全排列

    当给定字符串的字符以任意形式重新排列时,就形成了字符串的排列。例如,在本教程中,我们将讨论如何使用 C++ 的标准模板库打印给定字符串的所有排列 Input : s = “ADT”Output : “ADT”, “ATD”, &…

    2025年12月17日
    000
  • C语言中的字符串字面值是什么?

    字符串文字是一个以零结尾的字符序列。例如, Char * str = “hi, hello”; /* string literal */ 字符串字面量用于初始化数组。 char a1[] = “xyz”; /* a1 is char[4] holding {‘x’,’y’,’z’,”} */cha…

    2025年12月17日
    000
  • 检查三个给定字符串的子字符串是否可以连接成回文串

    回文是计算机科学和编程中的一个迷人话题。回文是一个单词、短语、数字或其他字符序列,从前往后读和从后往前读是一样的,忽略空格、标点和大小写。在本文中,我们将研究一个独特的问题:如何确定从三个给定的字符串中的子字符串是否可以连接起来形成一个回文。这个问题是一个常见的面试题,可以使用各种技术来解决,包括字…

    2025年12月17日
    000
  • 给定一个字符串,将其组成的所有可能长度的字符串都列出来

    在本节中,我们将看到如何生成任意长度的所有可能字符串,这将采用每个字符的组合来生成字符串。例如,如果字符串是ABC,则它将生成 – {A,B,C,AB,BA,BC,CB,CA,AC,ABC,ACB,BAC,BCA,CAB,CBA} 让我们看一个例子来理解。 算法 printAllStri…

    2025年12月17日
    000
  • 检查给定字符串是否是回文的C程序?

    回文是一个单词、数字、短语或其他字符序列,它从前往后读和从后往前读是一样的。像madam或racecar这样的单词,或者像10801这样的数字都是回文。 对于给定的字符串,如果将字符串反转后得到的字符串与原字符串相同,则我们可以说该字符串是回文。这意味着要检查一个字符串是否是回文,我们需要找出第一个…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信