目录
方法
方法1:暴力破解法
语法
算法
Example 2
示例2
输出
方法二:检查子字符串
结论
首页 后端开发 C++ 检查任意字符串的左移和右移是否会得到给定的字符串

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

Sep 17, 2023 am 11:29 AM
字符串 左移 右移

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

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

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

方法

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

方法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 <iostream>
#include <string>

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 shift
else:
   //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 <iostream>
#include <string>

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和任何字符串的右移都会导致给定的字符串−

以上是检查任意字符串的左移和右移是否会得到给定的字符串的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1421
52
Laravel 教程
1315
25
PHP教程
1266
29
C# 教程
1239
24
PHP中int类型转字符串的方法详解 PHP中int类型转字符串的方法详解 Mar 26, 2024 am 11:45 AM

PHP中int类型转字符串的方法详解在PHP开发中,经常会遇到将int类型转换为字符串类型的需求。这种转换可以通过多种方式实现,本文将详细介绍几种常用的方法,并附带具体的代码示例来帮助读者更好地理解。一、使用PHP内置函数strval()PHP提供了一个内置函数strval(),可以将不同类型的变量转换为字符串类型。当我们需要将int类型转换为字符串类型时,

python怎么重复字符串_python重复字符串教程 python怎么重复字符串_python重复字符串教程 Apr 02, 2024 pm 03:58 PM

1、首先打开pycharm,进入到pycharm主页。2、然后新建python脚本,右键--点击new--点击pythonfile。3、输入一段字符串,代码:s="-"。4、接着需要把字符串里面的符号重复20次,代码:s1=s*20。5、输入打印输出代码,代码:print(s1)。6、最后运行脚本,在最底部会看到我们的返回值:-就重复了20次。

Golang字符串是否以指定字符结尾的判断方法 Golang字符串是否以指定字符结尾的判断方法 Mar 12, 2024 pm 04:48 PM

标题:Golang中判断字符串是否以指定字符结尾的方法在Go语言中,有时候我们需要判断一个字符串是否以特定的字符结尾,这在处理字符串时十分常见。本文将介绍如何使用Go语言来实现这一功能,同时提供代码示例供大家参考。首先,让我们来看一下Golang中如何判断一个字符串是否以指定字符结尾的方法。Golang中的字符串可以通过索引来获取其中的字符,而字符串的长度可

如何在Go语言中截取字符串 如何在Go语言中截取字符串 Mar 13, 2024 am 08:33 AM

Go语言是一种强大且灵活的编程语言,它提供了丰富的字符串处理功能,包括字符串截取。在Go语言中,我们可以使用切片(slice)来截取字符串。接下来,将详细介绍如何在Go语言中截取字符串,并附上具体的代码示例。一、使用切片截取字符串在Go语言中,可以使用切片表达式来截取字符串的一部分。切片表达式的语法如下:slice:=str[start:end]其中,s

Golang中如何检查字符串是否以特定字符开头? Golang中如何检查字符串是否以特定字符开头? Mar 12, 2024 pm 09:42 PM

Golang中如何检查字符串是否以特定字符开头?在使用Golang编程时,经常会遇到需要检查一个字符串是否以特定字符开头的情况。针对这一需求,我们可以使用Golang中的strings包提供的函数来实现。接下来将详细介绍如何使用Golang检查字符串是否以特定字符开头,并附上具体的代码示例。在Golang中,我们可以使用strings包中的HasPrefix

解决PHP中16进制转字符串出现中文乱码的方法 解决PHP中16进制转字符串出现中文乱码的方法 Mar 04, 2024 am 09:36 AM

解决PHP中16进制转字符串出现中文乱码的方法在PHP编程中,有时候我们会遇到需要将16进制表示的字符串转换为正常的中文字符的情况。然而,在进行这个转换的过程中,有时会遇到中文乱码的问题。这篇文章将为您提供解决PHP中16进制转字符串出现中文乱码的方法,并给出具体的代码示例。使用hex2bin()函数进行16进制转换PHP内置的hex2bin()函数可以将1

PHP字符串匹配技巧:避免模糊包含表达式 PHP字符串匹配技巧:避免模糊包含表达式 Feb 29, 2024 am 08:06 AM

PHP字符串匹配技巧:避免模糊包含表达式在PHP开发中,字符串匹配是一个常见的任务,通常用于查找特定的文本内容或验证输入的格式。然而,有时候我们需要避免使用模糊的包含表达式来确保匹配的准确性。本文将介绍一些在PHP中进行字符串匹配时避免模糊包含表达式的技巧,并提供具体的代码示例。使用preg_match()函数进行精确匹配在PHP中,可以使用preg_mat

Golang 字符串修改详解:动态调整和可变性 Golang 字符串修改详解:动态调整和可变性 Apr 08, 2024 pm 03:27 PM

GoLang中的字符串虽然不可变,但可通过以下技术动态修改:使用字符串连接符连接字符串。使用字符串格式化创建新字符串。修改字符串底层字节切片。使用第三方库提供的可变字符串类型。

See all articles