2022-12-24:给定一个字符串s,其中都是英文小写字母,
如果s中的子串含有的每种字符都是偶数个,
那么这样的子串就是达标子串,子串要求是连续串。
返回s中达标子串的最大长度。
1 <= s的长度 <= 10^5,
字符种类都是英文小写。
来自微软。

答案2022-12-24:

shell编写的代码真慢。
map存status最早状态的序号+status整型存26个字母的状态。
注意还没遍历的时候map[0]=-1,这是最早的状态。
时间复杂度:O(N)。
空间复杂度:O(N)。

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

#!/bin/bash

# public static int getMax(int a, int b)
function getMax()
{
if [ $1 -gt $2 ];then
echo $1
else
echo $2
fi
} # public static boolean ok(String s, int l, int r)
function ok(){
eval s=\$$1
local l=$2
local r=$3
if [ $[($r-$l+1)&1] == 1 ]
then
return 0
fi local cnts=()
local i=0
while [ $i -lt 26 ]
do
cnts[$i]=0
i=$[$i+1]
done i=$l
while [ $i -le $r ]
do
local c=${s:$i:1}
local num=$(echo $c| tr -d "\n" | od -An -t dC)
num=$[$num-97]
cnts[$num]=$[${cnts[$num]}+1]
i=$[$i+1]
done i=0
while [ $i -lt 26 ]
do
if [ $[${cnts[$i]}&1] == 1 ]
then
return 0
fi
i=$[$i+1]
done return 1
} # public static int maxLen1(String s)
function maxLen1(){
eval s=\$$1
local n=${#s}
local ans=0
local i=0
while [ $i -lt $n ]
do
local j=$[$n-1]
while [ $j -ge $i ]
do
ok s $i $j
if [ $? == 1 ]
then
ans=$(getMax $ans $[$j-$i+1])
fi
j=$[$j-1]
done
i=$[$i+1]
done echo $ans
} # public static int maxLen2(String s)
function maxLen2(){
eval s=\$$1
local n=${#s}
declare -A map
map[0]=-1
local status=0
local ans=0
local i=0
while [ $i -lt $n ]
do
local c=${s:$i:1}
local num=$(echo $c| tr -d "\n" | od -An -t dC)
num=$[$num-97]
num=$[1<<$num]
status=$[($status)^($num)]
if [ "${map[$status]}" = "" ]
then
map[$status]=$i
else
ans=$(getMax $ans $[$i-${map[$status]}])
fi
i=$[$i+1]
done echo $ans
} # 为了测试
# public static String randomString(int n, int v)
function randomString(){
local n=$1
local v=$2
local i=0
local ans=""
while [ $i -lt $n ]
do
local temp=$RANDOM%$v
temp=$[$temp+97]
local a=$(echo $temp | awk '{printf("%c", $1)}')
ans=$ans$a
i=$[$i+1]
done
echo $ans
} # 为了测试
function main(){
local s="moonfdd"
echo $(maxLen1 s)
echo $(maxLen2 s) local n=6
local v=6
local testTimes=5
printf "测试开始\r\n"
local i=0
while [ $i -lt $testTimes ]
do
printf "i = %d\r\n" $i
local s=$(randomString $n $v)
printf "s = %s\r\n" $s
local ans1=$(maxLen1 s)
local ans2=$(maxLen2 s)
if [ $ans1 != $ans2 ]
then
printf "%s\r\n" s
printf "%s\r\n" ans1
printf "%s\r\n" ans2
break
fi
printf "ans = %s\r\n" $ans1
printf "end===============\r\n"
i=$[$i+1]
done
printf "测试结束\r\n" } main maxLen1

2022-12-24:给定一个字符串s,其中都是英文小写字母, 如果s中的子串含有的每种字符都是偶数个, 那么这样的子串就是达标子串,子串要求是连续串。 返回s中达标子串的最大长度。 1 <= s的长的更多相关文章

  1. 算法:Manacher,给定一个字符串str,返回str中最长回文子串的长度。

    [题目] 给定一个字符串str,返回str中最长回文子串的长度 [举例] str="123", 1 str="abc1234321ab" 7 [暴力破解] 从左 ...

  2. 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  3. 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...

  4. 给定一个字符串,仅由a,b,c 3种小写字母组成。

    package com.boco.study; /** * 题目详情 给定一个字符串,仅由a,b,c 3种小写字母组成. 当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出 ...

  5. 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)

    需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换  ab 不替换 ba 不替换 aba 不替换  aab 替换为 ...

  6. 给定一个字符串,根据字符出现频率排序--Java实现

    题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入:"tree" 输出:"eert" 解释:'e'出现两次,'r'和't' ...

  7. 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。

    题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...

  8. 核心API的使用(给定一个字符串,统计每个字符出现的次数)

    /** * 给定一个字符串,统计每个字符出现的次数. 如:abdaewrwqask435a1aasd */public class ReplaceString { static int length; ...

  9. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*input,char*output)其中input是输入字符串,output是输出字符串

    import java.util.Scanner; /*** * 1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg, 字符串内的其他字 ...

  10. LeetCode 151:给定一个字符串,逐个翻转字符串中的每个单词 Reverse Words in a String

    公众号:爱写bug(ID:icodebugs) 翻转字符串里的单词 Given an input string, reverse the string word by word. 示例 1: 输入: ...

随机推荐

  1. OSPF RFC 1583 兼容

  2. pycharm conmunity 2022.1没有mange repositories,只能使用命令方式修改镜像源(长期可信)

    https://blog.csdn.net/qq_43625764/article/details/124656990

  3. 例题1:shell脚本

    题目总结: 1.搜索子域名的shell脚本 2.嗅探并抓去网页快照shell脚本 3.漏洞利用程序下载脚本 题目一:依次输入以下代码即可: 1.wget www.megacorpone.com  2. ...

  4. git rebase时出现的提示信息

    root@host: /home/wkxnk/project$  git rebase master First, rewinding head to replay your work on top ...

  5. SpringBoot笔记--自动配置(高级内容)(中集)

    @Enable*注解 使用该注解,需要导入相应的依赖坐标,其中的groupId标签里面写入Bean的Java文件所在的包的路径下面 spring-enable-other 还需要在SpringBoot ...

  6. 机器学习基础05DAY

    分类算法之k-近邻 k-近邻算法采用测量不同特征值之间的距离来进行分类 优点:精度高.对异常值不敏感.无数据输入假定 缺点:计算复杂度高.空间复杂度高 使用数据范围:数值型和标称型 一个例子弄懂k-近 ...

  7. Perceptron, Support Vector Machine and Dual Optimization Problem (1)

    Linear Decision Boundary(线性决策边界) Example. (classification problem) 给定一个二元的特征空间 \(\mathcal{X} = \left ...

  8. 鸿蒙开发学习笔记-UIAbility-Router页面跳转接口源码分析

    在鸿蒙开发中,UIAbility的跳转使用 router 方法. 在使用的时候需导入 import router from '@ohos.router'; 该方法接口成员如下: 1.interface ...

  9. 基于docker和cri-dockerd部署k8sv1.26.3

    cri-dockerd是什么? 在 Kubernetes v1.24 及更早版本中,我们使用docker作为容器引擎在k8s上使用时,依赖一个dockershim的内置k8s组件:k8s v1.24发 ...

  10. 【论文翻译】LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

    LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 论文地址:https://arxiv.org/pdf/2106.09685.pdf 代码地址:ht ...