搜尋
首頁後端開發C++檢查任意字串的左移和右移是否會得到給定的字串

檢查任意字串的左移和右移是否會得到給定的字串

字元的集合由字串資料類型表示。它使用字母、數字、符號和空格進行邏輯排列。大多數電腦語言使用單引號或雙引號將字串括起來,以區分它們與其他資料類型。

程式設計師經常使用字串來進行一些輸入和輸出操作,儲存和操作文字資料等。字串的一些常見操作包括拼接(將兩個或多個字串合併)、提取子字串(獲取字串的一部分)以及在字串中搜尋特定字元或模式。

方法

我們可以使用以下方法來確定字串的左移和右移結果是否為每個字串−

方法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中文網其他相關文章!

陳述
本文轉載於:tutorialspoint。如有侵權,請聯絡admin@php.cn刪除
在C中使用XML:庫和工具指南在C中使用XML:庫和工具指南May 09, 2025 am 12:16 AM

在C 中使用XML是因為它提供了結構化數據的便捷方式,尤其在配置文件、數據存儲和網絡通信中不可或缺。 1)選擇合適的庫,如TinyXML、pugixml、RapidXML,根據項目需求決定。 2)了解XML解析和生成的兩種方式:DOM適合頻繁訪問和修改,SAX適用於大文件或流數據。 3)優化性能時,TinyXML適合小文件,pugixml在內存和速度上表現好,RapidXML處理大文件優異。

C#和C:探索不同的範例C#和C:探索不同的範例May 08, 2025 am 12:06 AM

C#和C 的主要區別在於內存管理、多態性實現和性能優化。 1)C#使用垃圾回收器自動管理內存,C 則需要手動管理。 2)C#通過接口和虛方法實現多態性,C 使用虛函數和純虛函數。 3)C#的性能優化依賴於結構體和並行編程,C 則通過內聯函數和多線程實現。

C XML解析:技術和最佳實踐C XML解析:技術和最佳實踐May 07, 2025 am 12:06 AM

C 中解析XML數據可以使用DOM和SAX方法。 1)DOM解析將XML加載到內存,適合小文件,但可能佔用大量內存。 2)SAX解析基於事件驅動,適用於大文件,但無法隨機訪問。選擇合適的方法並優化代碼可提高效率。

c在特定領域:探索其據點c在特定領域:探索其據點May 06, 2025 am 12:08 AM

C 在遊戲開發、嵌入式系統、金融交易和科學計算等領域中的應用廣泛,原因在於其高性能和靈活性。 1)在遊戲開發中,C 用於高效圖形渲染和實時計算。 2)嵌入式系統中,C 的內存管理和硬件控制能力使其成為首選。 3)金融交易領域,C 的高性能滿足實時計算需求。 4)科學計算中,C 的高效算法實現和數據處理能力得到充分體現。

揭穿神話:C真的是一種死語嗎?揭穿神話:C真的是一種死語嗎?May 05, 2025 am 12:11 AM

C 沒有死,反而在許多關鍵領域蓬勃發展:1)遊戲開發,2)系統編程,3)高性能計算,4)瀏覽器和網絡應用,C 依然是主流選擇,展現了其強大的生命力和應用場景。

C#vs. C:編程語言的比較分析C#vs. C:編程語言的比較分析May 04, 2025 am 12:03 AM

C#和C 的主要區別在於語法、內存管理和性能:1)C#語法現代,支持lambda和LINQ,C 保留C特性並支持模板。 2)C#自動內存管理,C 需要手動管理。 3)C 性能優於C#,但C#性能也在優化中。

用C構建XML應用程序:實例用C構建XML應用程序:實例May 03, 2025 am 12:16 AM

在C 中處理XML數據可以使用TinyXML、Pugixml或libxml2庫。 1)解析XML文件:使用DOM或SAX方法,DOM適合小文件,SAX適合大文件。 2)生成XML文件:將數據結構轉換為XML格式並寫入文件。通過這些步驟,可以有效地管理和操作XML數據。

C中的XML:處理複雜的數據結構C中的XML:處理複雜的數據結構May 02, 2025 am 12:04 AM

在C 中處理XML數據結構可以使用TinyXML或pugixml庫。 1)使用pugixml庫解析和生成XML文件。 2)處理複雜的嵌套XML元素,如書籍信息。 3)優化XML處理代碼,建議使用高效庫和流式解析。通過這些步驟,可以高效處理XML數據。

See all articles

熱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

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

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)