檢查字串是否可以打斷另一個字串 (C++)


假設我們有兩個長度相同的字串 s1 和 s2;我們必須檢查 s1 的某種排列是否可以打斷 s2 的某種排列,反之亦然。如果對於所有 i(範圍從 0 到 n-1),x[i] >= y[i](按字母順序),則字串 a 可以打斷字串 b。

因此,如果輸入類似於 s1 = abc 和 s2 = xya,則輸出將為 true。這是因為“ayx”是 s2 的一個排列,可以打斷 s1 =“abc”的排列“abc”。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個函式 check(),它將接收 s1、s2。

  • 初始化 i := 0,當 i < s1 的大小,更新 (i 增加 1),執行:

    • 如果 s2[i] < s1[i],則:

      • 返回 false

  • 返回 true

  • 在主方法中,執行以下操作:

  • 對陣列 s1 進行排序

  • 對陣列 s2 進行排序

  • f3 := check(s2, s1)

  • f4 := check(s1, s2)

  • 如果 f3 為 true 或 f4 為 true,則返回 true,否則返回 false

示例

讓我們看看下面的實現,以便更好地理解:

線上演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool check(string& s1, string& s2){
      for (int i = 0; i < s1.size(); i++) {
         if (s2[i] < s1[i])
            return false;
      }
      return true;
   }
   bool checkIfCanBreak(string s1, string s2) {
      sort(s1.begin(), s1.end());
      sort(s2.begin(), s2.end());
      bool f3 = check(s2, s1);
      bool f4 = check(s1, s2);
      return f3 || f4;
   }
};
main(){
   Solution ob;
   cout << (ob.checkIfCanBreak("abc", "xya"));
}

輸入

"abc", "xya"

輸出

1

更新於:2020年11月17日

188 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.