PAT A1140 Look-and-say Sequence [字符串处理]

题目描述

链接
题意有点迷,就是字符串是:[数字1][数字1的个数][数字2][数字2的个数]组成

分析

  • 写的时候写了半天,关键是边界没处理好!!其实可以手动模拟下
  • to_string(val) 将数值转字符串
  • 其实不用cnt记录个数,直接循环找j的位置,作减法就好
  • 能不写while就不写,写for多好,然后就是另一种写法真的优雅

代码

#include<bits/stdc++.h>
using namespace std;

int main(){
    string s;
    int m;
    cin>>s>>m;
    m--;
    while(m--){
        int len = s.length();
        string t;
        int cnt = 0;
        for(int i=0;i<len;i++){
            t += s[i];
            cnt++;
            for(int j=i+1; j<len; j++){
                if(s[i] != s[j]){
                    i = j-1;
                    break;
                }
                cnt++;
                if(j+1 == len){
                    i = j;
                    break;
                }
            }
            t += to_string(cnt);
            cnt = 0;
        }
        s = t;
    }
    cout<<s<<endl;
}

更好的写法

#include <iostream>
using namespace std;
int main() {
    string s;
    int n, j;
    cin >> s >> n;
    for (int cnt = 1; cnt < n; cnt++) {
        string t;
        for (int i = 0; i < s.length(); i = j) {
            for (j = i; j < s.length() && s[j] == s[i]; j++);
            t += s[i] + to_string(j - i);
        }
        s = t;
    }
    cout << s;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/doragd/p/11448859.html