解题思路

这是一道字符串处理题目,主要思路如下:

  1. 对于每个输入的单词:

    • 如果长度小于10,直接输出原单词
    • 如果长度大于等于10,进行缩写处理:
      • 保留首字母
      • 中间替换为字符个数(去掉首尾后的长度)
      • 保留尾字母
  2. 缩写规则示例:

    • "localization" (12字符) -> "l10n"
    • "internationalization" (20字符) -> "i18n"
    • "word" (4字符) -> "word" (保持不变)

代码

#include <iostream>
#include <string>
using namespace std;

int main() {
    int T;
    cin >> T;
    
    while(T--) {
        string s;
        cin >> s;
        
        // 获取字符串长度
        int len = s.length();
        
        // 长度大于等于10时进行缩写
        if(len >= 10) {
            string result = "";
            result += s[0];  // 首字母
            result += to_string(len - 2);  // 中间字符数
            result += s[len - 1];  // 尾字母
            s = result;
        }
        
        cout << s << endl;
    }
    
    return 0;
}
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        
        while(T-- > 0) {
            String s = sc.next();
            int len = s.length();
            
            // 长度大于等于10时进行缩写
            if(len >= 10) {
                StringBuilder result = new StringBuilder();
                result.append(s.charAt(0));  // 首字母
                result.append(len - 2);      // 中间字符数
                result.append(s.charAt(len - 1));  // 尾字母
                s = result.toString();
            }
            
            System.out.println(s);
        }
    }
}
def abbreviate_word(word):
    # 获取字符串长度
    length = len(word)
    
    # 长度大于等于10时进行缩写
    if length >= 10:
        # 构造缩写:首字母 + 中间字符数 + 尾字母
        return word[0] + str(length - 2) + word[-1]
    
    return word

def main():
    # 读取测试用例数量
    T = int(input())
    
    # 处理每个测试用例
    for _ in range(T):
        word = input()
        print(abbreviate_word(word))

if __name__ == "__main__":
    main()

算法及复杂度

  • 算法:字符串处理
  • 时间复杂度: - 其中 为测试用例数量,每个单词的处理时间为
  • 空间复杂度: - 只需要常数级别的额外空间

注意事项

  1. 只有长度大于等于10的单词需要缩写
  2. 缩写后的格式为:首字母 + 中间字符数 + 尾字母
  3. 中间字符数需要转换为字符串
  4. 原长度小于10的单词保持不变