GO语言每日一练最长回文串,计数问题

题目名称:最长回文串 时间限制:1000ms内存限制:256M 题目描述 找出最长回文串
(“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串)(测试用例仅做参考,我们会根据代码质量进行评分)

输入描述: 输入一行小写字母组成的字符串。

输出描述: 输出最先出现的最长回文串。

示例 示例1 输入 babad 复制 输出 bab


// 请关闭中文输入法,用英文的字母和标点符号。
// 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
// 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
// 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
// 模版代码提供基本的输入输出框架,可按个人代码习惯修改

package main
import "fmt"

func solution(str string)string{
 
	 n := len(str)
    var longestPal string

    // 遍历字符串中所有可能的中心点
    for i := 0; i < n; i++ {
        for j := i; j <= i+1; j++ {
            left, right := i, j
            // 尝试扩展以当前中心点为中心的回文串
            for left >= 0 && right < n && str[left] == str[right] {
                left--
                right++
            }

            // 根据当前扩展出来的回文串更新最长回文串
            if right-left-1 > len(longestPal) {
                longestPal = str[left+1 : right]
            }
        }
    }
    fmt.Println(longestPal)
    return longestPal

}

func main() {
    var str string
    fmt.Scan(&str)

	solution(str)
}

最长回文子串问题可以用多种算法解决,其中一个常见的算法是“中心扩展法”。

该算法的基本思路是,对于每个可能成为回文中心的位置,尽可能地扩展这个回文中心,直到无法扩展为止。在扩展的过程中,记录下当前最长的回文子串。

具体实现时,我们可以枚举每个可能成为回文中心的位置,分别以该位置和该位置之间的空隙作为回文中心进行扩展。由于回文子串长度可能是奇数也可能是偶数,所以需要分别处理这两种情况。

在这里插入图片描述

题目名称:计数问题 时间限制:1000ms内存限制:256M 题目描述 试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤
9) 共出现了多少次?例如,在 1 到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。

输入描述: 2 个整数 n,x ,之间用一个空格隔开。

输出描述: 1 个整数,表示 x 出现的次数。

示例 示例1 输入 11 1 复制 输出 4


// 请关闭中文输入法,用英文的字母和标点符号。
// 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
// 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
// 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
// 模版代码提供基本的输入输出框架,可按个人代码习惯修改

package main
import "fmt"

func solution(arr [2]int){
     count := 0

    if arr[0] < arr[1] {
        for i := arr[0]; i <= arr[1]; i++ {
            num := i
            for num > 0 {
                if num%10 == arr[1] {
                    count++
                }
                num /= 10
            }
        }
    } else {
        for i := arr[1]; i <= arr[0]; i++ {
            num := i
            for num > 0 {
                if num%10 == arr[1] {
                    count++
                }
                num /= 10
            }
        }
    }

    
    
    fmt.Println(count)
    
    

}
func main() {
    var arr [2]int
    
    for i := 0; i < 2; i++ {
        fmt.Scan(&arr[i])
    }


	solution(arr)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值