栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

牛文字母歌

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

牛文字母歌

题目描述
一个鲜为人知的事实是,奶牛拥有自己的文字:「牛文」。

牛文由 26 个字母 a 到 z 组成,但是当奶牛说牛文时,可能与我们所熟悉的 abcdefghijklmnopqrstuvwxyz 不同,她会按某种特定的顺序排列字母。

为了打发时间,奶牛 Bessie 在反复哼唱牛文字母歌,而 Farmer John 好奇她唱了多少遍。

给定一个小写字母组成的字符串,为 Farmer John 听到 Bessie 唱的字母,计算 Bessie 至少唱了几遍完整的牛文字母歌,使得 Farmer John 能够听到给定的字符串。

Farmer John 并不始终注意 Bessie 所唱的内容,所以他可能会漏听 Bessie 唱过的一些字母。

给定的字符串仅包含他记得他所听到的字母。

输入格式
输入的第一行包含 26 个小写字母,为a到z的牛文字母表顺序。

下一行包含一个小写字母组成的字符串,为 Farmer John 听到 Bessie 唱的字母。

输出格式
输出 Bessie 所唱的完整的牛文字母歌的最小次数。

数据范围
字符串的长度不小于 1 且不大于 1000。

样例
输入样例:
abcdefghijklmnopqrstuvwxyz
mood
输出样例:
3
样例解释
在这个样例中,牛文字母表与日常的字母表的排列一致。

Bessie 至少唱了三遍牛文字母歌。

有可能 Bessie 只唱了三遍牛文字母歌,而 Farmer John 听到了以下被标记为大写的字母。

abcdefghijklMnOpqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcDefghijklmnopqrstuvwxyz

思路一:
trie树标记
注意前一个字母与后一个字母大小关系即可hhh

时间复杂度 O(n)
参考文献
C++ 代码

#include 
#include 
#include 
using namespace std;
const int N = 1e5+10;
string s1,s2;
int p[30];
int res;
int main()
{
    cin>>s1;
    for (int i = 0; i < 26; i ++ )p[s1[i]-'a']=i;
    cin>>s2;
    for (int i = 0; i < s2.size(); i ++ )
    {
        if(p[s2[i]-'a']<=p[s2[i-1]-'a'])
           res++;
    }
    return  cout< 

Java代码

import java.util.*;
import java.io.*;
public class Main{
    static  int  p[]=new int [300];
    static  int res=0;
    public static void main(String[] args) {
        Scanner cin =new Scanner(System.in);
        String s1=cin.next();
        for (int i = 0; i < 26; i ++ )p[s1.charAt(i)-'a']=i;
        String s2=cin.next();
        for (int i = 1; i < s2.length(); i ++ )
        {
            if(p[s2.charAt(i)-'a']<=p[s2.charAt(i-1)-'a'])
                res++;
        }
        System.out.println(res+1);
    }
}

python3代码

def main():
    song = list(input())
    listen = list(input())
    result = 1
    for i in range( len(listen) - 1)  :
     if song.index(listen[i]) >= song.index(listen[i+1]):
        result = result + 1
    print(result)
if __name__ == "__main__":
    main()

GO 代码

package main

import "fmt"

func main() {
    var alpha, s string 
    fmt.Scanf("%sn%s", &alpha, &s)

    var q map[byte]int = make(map[byte]int, 26)
    for i := 0; i < 26; i++ {
        q[alpha[i]] = i
    }
    var ans int = 0
    for i := 1; i < len(s); i++ {
        if q[s[i]] <= q[s[i-1]] {
            ans++
        }
    }
    fmt.Print(ans+1)
}

其他人解法:
思路二:
典型的双指针问题,用i指向s,j指向p,同时用cnt代表循环次数,如果i已经循环到头了,则重置i=0,并且cnt++
最后输出cnt就是答案~

时间复杂度
参考文献
C++ 代码

#include 

using namespace std;

const int N = 1010;

char s[N];
char p[N];

int main()
{
    cin >> s >> p;
    int cnt = 1, i = 0, j = 0;
    while(p[j])
    {
        while(s[i] != p[j] && s[i]) i ++;
        if(s[i] == p[j]) i ++, j ++;
        else
        {
            cnt ++;
            i = 0;
        }
    }

    cout << cnt << endl;

    return 0;
}

欢迎留言点赞

嗷嗷嗷~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/990280.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号