1 条题解

  • 0
    @ 2026-6-3 0:18:27

    注意到

    去除字符串中连续重复的字符,只保留一个,最后输出压缩后字符串的长度。

    规则:相邻相同字符压缩成一个,如 qqqqq → q,ww → w

    解题思路

    初始答案为 1(第一个字符算)从第二个字符开始遍历,

    只要和前一个字符不同就答案加一,最终直接输出答案。

    .

    这是赛时这样写的还是麻烦了 直接计数就好

    ll n;
    int main()
    {
        AC;
        int t; cin>>t;
        while(t--)
        {
            cin>>n;
            string s,ans;
            string sr;
            cin>>sr;
            s=" "+sr;
            for(int i=1;i<=n;++i)
                if(s[i]!=s[i-1]) ans+=s[i];
            cout<<ans.size()<<'\n';
        }
        return 0;
    }
    

    正解

    C++版本

    ll n;
    int main()
    {
        AC;
        int t; cin>>t;
        while(t--)
        {
            cin>>n;
            string s;
            string sr;
            cin>>sr;
            s=" "+sr;
            ll ans=0;
            for(int i=1;i<=n;++i)
                if(s[i]!=s[i-1]) ans++;
            cout<<ans<<'\n';
        }
        return 0;
    }
    

    Python版本

    import sys
    def main():
        data=sys.stdin.read().split()
        t=int(data[0])
        idx=1
        for _ in range(t):
            n=int(data[idx])
            s=data[idx+1]
            idx+=2
            ans=0
            s=" "+s
            for i in range(1,n+1):
                if s[i]!=s[i-1]:
                    ans+=1
            print(ans)
    if __name__=="__main__":
        main()
    
    • 1

    信息

    ID
    1160
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    4
    已通过
    2
    上传者