| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 990 人关注过本帖
标题:这题一直显示超时,能帮我一下吗
只看楼主 加入收藏
根根本根
Rank: 2
来 自:上海
等 级:论坛游民
帖 子:64
专家分:15
注 册:2018-3-19
结帖率:62.5%
收藏
已结贴  问题点数:10 回复次数:1 
这题一直显示超时,能帮我一下吗
05:统计单词数
总时间限制: 1000ms 内存限制: 65536kB
描述
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。

输入
2 行。
第 1 行为一个字符串,其中只含字母,表示给定单词;
第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
输出
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。
样例输入
样例 #1:
To
to be or not to be is a question

样例 #2:
to
Did the Ottoman Empire lose its power at that time
样例输出
样例 #1:
2 0

样例 #2:
-1
来源
NOIP2011复赛 普及组 第二题


我的代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
    string s,s1;
    getline(cin,s1);
    getline(cin,s);
    if(s1.size()>s.size()){
        cout<<-1;
        return 0;
    }
    s=' '+s+' ';
    s1=' '+s1+' ';
    for(int i=1; i<s.size()-1; i++) {
        s[i]=tolower(s[i]);
    }
    for(int i=1; i<s1.size()-1; i++) {
        s1[i]=tolower(s1[i]);
    }
    int j=s.find(s1);
    if(j==string::npos) {
        cout<<-1;
        return 0;
    }
    int c=0;
    while(s.find(s1)!=string::npos) {
        c++;
        s[s.find(s1)+1]=' ';
    }
    cout<<c<<" "<<j;
    return 0;
}
搜索更多相关主题的帖子: 单词 文章 位置 出现 给定 
2018-06-21 15:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:7 
要贴原始链接,比如 http://www.若不是身为版主,我都懒得告诉你这些基本礼仪
程序代码:
#include <iostream>
#include <algorithm>
using namespace std;

int main( void )
{
    string a, b;
    getline( cin, a );
    getline( cin, b );
    std::transform( a.begin(), a.end(), a.begin(), ::toupper );
    std::transform( b.begin(), b.end(), b.begin(), ::toupper );
    a = ' ' + a + ' ';
    b = ' ' + b + ' ';

    size_t index = b.find( a );
    if( index == string::npos )
        cout << -1;
    else
    {
        size_t count = 1;
        for( size_t i=index; i=b.find(a,i+a.size()-1), i!=string::npos; ++count );
        cout << count << ' ' << index;
    }
}

2018-06-22 12:48
快速回复:这题一直显示超时,能帮我一下吗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015285 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved