將給定字串縮寫,用長度替換所有字元,但首尾字元除外


在這個問題中,我們需要將長度大於2的字串轉換為其縮寫形式。我們可以使用字串的“length”屬性來計算字串中中間字元的總數,並可以使用各自的索引值來獲取首尾字元。

問題陳述− 我們給定了一個長度大於等於2的字串str,需要將其轉換為縮寫形式。

字串的縮寫形式如下所示:首字元 + 中間字元總數 + 尾字元。

示例

輸入

str = ‘abcdefg’

輸出

a5g

說明− ‘a’是首字元,‘g’是尾字元,它們之間共有5個字元。

輸入

 str = ‘tutorialspoint’

輸出

t12t

說明− 這裡,首尾字元都是‘t’,中間字元總數為12。

輸入

 str = ‘ab’

輸出

a0b

說明− 這裡,中間字元總數為0,因此結果字串為a0b。

方法1

在這種方法中,我們將遍歷字串以查詢字串的長度。之後,我們將訪問字串的首尾字元以建立其縮寫。

演算法

步驟1− 定義變數‘size’並初始化為0,用於儲存給定字串中的字元總數。

步驟2− 使用迴圈遍歷字串,直到我們得到‘\0’作為當前字元。

步驟3− 列印字串的首字元。

步驟4− 列印size − 2。

步驟5− 使用‘size − 1’索引列印字串的尾字元。

示例

#include <iostream>
using namespace std;

void abbreviateWord(string alpha){
    int size = 0;
    // counting total characters
    while (alpha[size] != '\0')
        size++;
    // first char
    cout << alpha[0];
    // tota middle characters
    cout << size - 2;
    // last char
    cout << alpha[size - 1];
}
int main(){
    string str = "abcdefghi";
    abbreviateWord(str);
    return 0;
}

輸出

a7i

時間複雜度− O(N),因為我們遍歷字串以計算字串中的字元總數。

空間複雜度− O(1),因為我們不使用額外的空間。

方法2

在這種方法中,我們將使用C++中字串的size()方法來獲取字串的長度。

演算法

步驟1− 使用size()方法獲取字串的長度,並用變數‘len’儲存。

步驟2− 使用索引‘0’訪問字串的首字元並列印。

步驟3− 列印‘len − 2’。

步驟4− 列印字串的尾字元。

示例

#include <iostream>
using namespace std;
void abbreviateWord(string alpha) {
    // get the string length
    int len = alpha.size();
    // 1st char
    cout << alpha[0];
    // print len - 2
    cout << len - 2;
    // last char
    cout << alpha[len - 1];
}
int main() {
    string str = "tutorialspoint";
    abbreviateWord(str);
    return 0;
}

輸出

t12t

時間複雜度− O(N),因為我們使用了size()方法。

空間複雜度− O(1),因為我們沒有使用動態空間。

結論

在本教程中,我們學習了使用兩種方法列印字串的縮寫。在第一種方法中,我們使用迴圈來計算字串中的字元總數,在第二種方法中,我們使用了size()方法。但是,程式設計師也可以使用length()方法。

更新於:2023年8月14日

瀏覽量:130

開啟你的職業生涯

透過完成課程獲得認證

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