2021-12-25:给定一个只由0和1组成的字符串S,假设下标从1开始,规定i位置的字符价值V[i]计算方式如下

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-12-25:给定一个只由0和1组成的字符串S,假设下标从1开始,规定i位置的字符价值V[i]计算方式如下相关的知识,希望对你有一定的参考价值。

2021-12-25:给定一个只由0和1组成的字符串S,假设下标从1开始,规定i位置的字符价值V[i]计算方式如下 :
1 i == 1时,V[i] = 1;
2 i > 1时,如果S[i] != S[i-1],V[i] = 1;
3 i > 1时,如果S[i] == S[i-1],V[i] = V[i-1] + 1。
你可以随意删除S中的字符,返回整个S的最大价值,
字符串长度<=5000。
来自腾讯。

答案2021-12-25:

递归。从左往右的尝试模型。
当前index位置的字符保留;当前index位置的字符不保留。这两种情况取最大值。

代码用golang编写。代码如下:

package main

import "fmt"

func main() 
    ret := max1("000001100000")
    fmt.Println(ret)


func max1(s string) int 
    if len(s) == 0 
        return 0
    
    str := []byte(s)
    arr := make([]int, len(str))
    for i := 0; i < len(arr); i++ 
        if str[i] == '0' 

         else 
            arr[i] = 1
        
    
    return process1(arr, 0, 0, 0)


// 递归含义 :
// 目前在arr[index...]上做选择, str[index...]的左边,最近的数字是lastNum
// 并且lastNum所带的价值,已经拉高到baseValue
// 返回在str[index...]上做选择,最终获得的最大价值
// index -> 0 ~ 4999
// lastNum -> 0 or 1
// baseValue -> 1 ~ 5000
// 5000 * 2 * 5000 -> 5 * 10^7(过!)
func process1(arr []int, index, lastNum, baseValue int) int 
    if index == len(arr) 
        return 0
    
    curValue := 0
    if lastNum == arr[index] 
        curValue = baseValue + 1
     else 
        curValue = 1
    

    // 当前index位置的字符保留
    next1 := process1(arr, index+1, arr[index], curValue)
    // 当前index位置的字符不保留
    next2 := process1(arr, index+1, lastNum, baseValue)
    return getMax(curValue+next1, next2)


func getMax(a, b int) int 
    if a > b 
        return a
     else 
        return b
    


执行结果如下:


左神java代码

以上是关于2021-12-25:给定一个只由0和1组成的字符串S,假设下标从1开始,规定i位置的字符价值V[i]计算方式如下的主要内容,如果未能解决你的问题,请参考以下文章

2022-11-01:给定一个只由小写字母和数字字符组成的字符串str。 要求子串必须只含有一个小写字母,数字字符数量随意。 求这样的子串最大长度是多少?

5.16 0左边必有1的二进制字符串数量

2022-04-07:给定一个只由‘a‘和‘b‘组成的字符串str, str中“ab“和“ba“子串都可以消除, 消除之后剩下字符会重新靠在一起,继续出现可以消除的子串... 你的任务是决定一种消除的

2023-03-11:给定一个N*M的二维矩阵,只由字符‘O‘‘X‘‘S‘‘E‘组成, ‘O‘表示这个地方是可通行的平地, ‘X‘表示这个地方是不可通行的障碍, ‘S‘表示这个地方有一个士兵,全

2021-07-03:给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。

cpu是怎样工作的,为啥只由0和1组成就可以做任何计算