日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

我們已經給定了兩個字符串,需要檢查給定字符串的排列是否存在,以便一個排列可以比第 i 個索引處的另一個排列具有更大的字符。

我們可以通過對字符串進行排序,并逐一比較字符串中的每個字符來解決問題。另外,我們可以利用兩個字符串的字符頻率來解決問題。

問題陳述 – 我們給出了長度為N的字符串str1和str2。我們需要檢查是否存在任何字符串的排列,使得其中一個字符串的排列在字典序上大于另一個字符串。這意味著任何排列都應該在第i個索引處具有比另一個字符串排列的第i個索引字符更大的字符。

示例

輸入 – str1 = “aef”; str2 = “fgh”;

輸出– 是

解釋– ‘fgh’ 已經大于 ‘aef’。在這里,a > f, g > e, h > f。

輸入– str1 = “adsm”; str2 = “obpc”;

輸出– 否

Explanation– 我們無法找到任何一種排列,使得其中一個字符串的每個字符都大于另一個排列。

方法 1

在這種方法中,我們將按字典順序對兩個字符串進行排序。然后,我們將比較字符串的每個字符。如果str1的所有字符都小于str2,或者str2的所有字符都小于str1,則返回true。否則,返回false。

算法

    使用 sort() 方法對字符串進行排序。

    定義 isStr1Greater 布爾變量并使用 true 進行初始化。

    遍歷字符串,并且如果str1中第i個索引位置的字符小于str2,將isStr1Greater的值更新為false,并使用break關鍵字中斷循環

    如果 isStr1Greater 為真,則循環成功完成并返回真。

    現在,遍歷字符串以檢查 str2 是否大于 str1。如果我們發現 str1 的任何字符都大于 str2,則返回 false。

    如果循環成功完成,則返回true。

    示例

    #include <algorithm>
    #include <iostream>
    #include <string>
    using namespace std;
    
    bool isAnyPermLarge(string string1, string string2) {
       // sort the strings
       sort(string1.begin(), string1.end());
       sort(string2.begin(), string2.end());
       // to keep track if string1 is greater than string2
       bool isStr1Greater = true;
       // traverse the string
       for (int i = 0; i < string1.length(); i++) {
          // if any character of string1 is less than string2, return false.
          if (string1[i] < string2[i]) {
              isStr1Greater = false;
              break;
          }
       }
       // If string1 is greater, returning true
       if (isStr1Greater)
          return true;
       // traverse the string
       for (int i = 0; i < string2.length(); i++) {
          // if any character of string2 is less than string1, return false.
          if (string1[i] > string2[i]) {
              return false;
          }
       }
       // return true if string2 is greater than string1
       return true;
    }
    int main() {
       string string1 = "aef";
       string string2 = "fgh";
       bool res = isAnyPermLarge(string1, string2);
       if (res) {
          cout << "Yes, permutation exists such that one string is greater than the other.";
       } else {
          cout << "No, permutation does not exist such that one string is greater than the other.";
       }
       return 0;
    }
    

    登錄后復制

    輸出

    Yes, permutation exists such that one string is greater than the other.
    

    登錄后復制登錄后復制

    時間復雜度 – O(N*logN),因為我們對字符串進行排序。

    空間復雜度 – O(N) 是用來對字符串進行排序所需的。

    方法2

    在這種方法中,我們將存儲兩個字符串中每個字符的總頻率。之后,我們將使用累積頻率來決定是否可以找到任何字符串排列,使得其中一個大于另一個。

    算法

      定義長度為26的map1和map2數組,并初始化為零。

      將str1中字符的頻率存儲到map1中,將str2中字符的頻率存儲到map2中。

      定義isStr1和isStr2布爾變量,并初始化為false,以跟蹤str1是否大于str2。

      定義cnt1和cnt2變量來存儲字符串字符的累積頻率。

      遍歷map1和map2。將map1[i]添加到cnt1,將map2[i]添加到cnt2。

      如果 cnt1 大于 cnt2,則 str1 到第 i 個索引處的字符的累積頻率更大。如果是這樣,并且 str2 已經更大,則返回 false。否則,將 isStr1 更改為 true

      如果 cnt2 大于 cnt1,則 str2 中第 i 個索引處字符的累積頻率更大。如果是這樣,并且 str1 已經更大,則返回 false。否則,將 isStr2 更改為 true

      最后返回true。

      示例

      #include <iostream>
      #include <string>
      using namespace std;
      
      bool isAnyPermLarge(string string1, string string2) {
         int map1[26] = {0};
         int map2[26] = {0};
         // store the frequency of each character in the map1
         for (int i = 0; i < string1.length(); i++) {
            map1[string1[i] - 'a']++;
         }
         // store the frequency of each character in the map2
         for (int i = 0; i < string2.length(); i++) {
            map2[string2[i] - 'a']++;
         }
         // To keep track of which string is smaller. Initially, both strings are equal.
         bool isStr1 = false, isStr2 = false;
         // to count the cumulative frequency of characters of both strings
         int cnt1 = 0, cnt2 = 0;
         // traverse for all characters.
         for (int i = 0; i < 26; i++) {
            // update the cumulative frequency of characters
            cnt1 += map1[i];
            cnt2 += map2[i];
            if (cnt1 > cnt2) {
                // If string2 is already greater and cumulative frequency of string1 is greater than string2, then return false
                if (isStr2)
                    return false;
                // update isStr1 to true as string1 is smaller
                isStr1 = true;
            }
            if (cnt1 < cnt2) {
                // If string1 is already greater and cumulative frequency of string2 is greater than string1, then return false
                if (isStr1)
                    return false;
                // update isStr2 to true as string2 is smaller
                isStr2 = true;
            }
         }
         return true;
      }
      int main() {
         string string1 = "aef";
         string string2 = "fgh";
         bool res = isAnyPermLarge(string1, string2);
         if (res) {
            cout << "Yes, permutation exists such that one string is greater than the other.";
         } else {
            cout << "No, permutation does not exist such that one string is greater than the other.";
         }
         return 0;
      }
      

      登錄后復制

      輸出

      Yes, permutation exists such that one string is greater than the other.
      

      登錄后復制登錄后復制

      時間復雜度 – O(N),因為我們計算字符的頻率。

      空間復雜度 – O(26),因為我們在數組中存儲字符的頻率。

      我們學會了檢查兩個字符串是否存在任何排列,使得一個字符串的所有字符都可以大于另一個字符串。第一種方法采用排序方法,第二種方法采用字符累積頻率。

      以上就是檢查給定字符串的任何排列是否按字典順序大于另一個給定字符串的詳細內容,更多請關注www.xfxf.net其它相關文章!

分享到:
標簽:字符串排列 字典順序 比較
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定