每日算法刷题Day8-统计最长连续字符、最长单词、倒排单词

简介: ⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。

在这里插入图片描述

26.字符串中最长的连续出现的字符

求一个字符串中最长的连续出现的字符,输出该字符及其出现次数,字符串中无空白字符(空格、回车和 tabtab),如果这样的字符不止一个,则输出第一个。

输入格式

第一行输入整数 N,表示测试数据的组数。

每组数据占一行,包含一个不含空白字符的字符串,字符串长度不超过 200。

输出格式

共一行,输出最长的连续出现的字符及其出现次数,中间用空格隔开。

输入样例:

2
aaaaabbbbbcccccccdddddddddd
abcdefghigk

输出样例:

d 10
a 1

思路

筛选相同项通常会使用到双指针的思想,这里是第一类双指针。

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

int main()
{
    int n;
    cin>>n;
    
    while(n--)
    {
        string str;
        cin>>str;
        
        int cnt = 0;
        char c;
        
        for(int i = 1; i<str.size(); i++)
        {
            int j = i;
            while(j < str.size() && str[j] == str[i])j++;
            if(j - i > cnt) cnt = j -i, c = str[i];
            i = j - 1;
        }    
        
        cout << c << ' ' << cnt <<endl;
        
    }
    
    
    return 0;
}

27.最长单词

一个以 . 结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式,求句子中的最长单词。

输入格式

输入这个简单英文句子,长度不超过 500500。

输出格式

该句子中最长的单词。如果多于一个,则输出第一个。

输入样例:

I am a student of Peking University.

输出样例:

University

思路

.back()与.pop_back()

这里要特别注意两个函数。分别是

  • .back() 返回字符串的最后一个字符
  • .pop_back() 删除字符串的最后一个字符

还要注意这种比较传递的思想。

#include<iostream>

using namespace std;

int main()
{
    string res,str;
    
    while(cin >> str)
    {
        if(str.back() == '.')str.pop_back();
        if(str.size() > res.size())res = str;
    }

    cout<<res<<endl;
    return 0;
}

28.倒排单词

编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。

输入格式

输入为一个字符串(字符串长度至多为 100100)。

输出格式

输出为按要求排序后的字符串。

输入样例:

I am a student

输出样例:

student a am I

思路:

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

int main()
{
    string str[100];
    
    int n = 0;
    while(cin >> str[n])n++;
    //特别注意这里i = n - 1;因为上面读入时会将空格一起读入进去。这里避免输出空格,从而造成Presentation Error   
    for(int i = n-1 ; i >=0;i --)cout<<str[i] <<" ";
    cout<<endl;
    
    return 0;
}

也可以更简单,采用到着拼接的方法完成。

#include <iostream>
using namespace std;

int main()
{
    string str, res;
    while (cin >> str)
        res = str + ' ' + res;
    cout << res;
    return 0;
}
目录
相关文章
|
2月前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
48 0
|
4月前
|
算法
【算法】位运算算法——判断字符是否唯一
【算法】位运算算法——判断字符是否唯一
|
4月前
|
算法
【算法】滑动窗口——无重复字符的最长子串
【算法】滑动窗口——无重复字符的最长子串
|
2月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
17 0
|
4月前
|
算法 容器
【算法】滑动窗口——串联所有单词的子串
【算法】滑动窗口——串联所有单词的子串
|
4月前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
|
4月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
45 0
|
4月前
|
算法 Python
【Leetcode刷题Python】改进的算法,高效求一个数的因子
一个高效的Python函数用于找出一个整数的所有因子,通过仅遍历到该数平方根的范围来优化性能。
43 0
|
6月前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
6月前
|
算法
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)