目錄
方法
方法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

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++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教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1253
24
PHP中int型別轉字串的方法詳解 PHP中int型別轉字串的方法詳解 Mar 26, 2024 am 11:45 AM

PHP中int型別轉字串的方法詳解在PHP開發中,常會遇到將int型別轉換為字串型別的需求。這種轉換可以透過多種方式實現,本文將詳細介紹幾種常用的方法,並附帶具體的程式碼範例來幫助讀者更好地理解。一、使用PHP內建函數strval()PHP提供了一個內建函數strval(),可以將不同類型的變數轉換為字串類型。當我們需要將int型別轉換為字串型別時,

怎麼重複字串_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次。

如何在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 04:48 PM

標題:Golang中判斷字串是否以指定字元結尾的方法在Go語言中,有時候我們需要判斷一個字串是否以特定的字元結尾,這在處理字串時十分常見。本文將介紹如何使用Go語言來實現這項功能,同時提供程式碼範例供大家參考。首先,讓我們來看看Golang中如何判斷一個字串是否以指定字元結尾的方法。 Golang中的字串可以透過索引來取得其中的字符,而字串的長度可

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