将给定字符串缩写,用长度替换所有字符,但首尾字符除外


在这个问题中,我们需要将长度大于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.