2022-12-24:给定一个字符串s,其中都是英文小写字母, 如果s中的子串含有的每种字符都是偶数个, 那么这样的子串就是达标子串,子串要求是连续串。 返回s中达标子串的最大长度。 1 <= s的长
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的长的更多相关文章
- 算法:Manacher,给定一个字符串str,返回str中最长回文子串的长度。
[题目] 给定一个字符串str,返回str中最长回文子串的长度 [举例] str="123", 1 str="abc1234321ab" 7 [暴力破解] 从左 ...
- 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...
- 给定一个字符串,仅由a,b,c 3种小写字母组成。
package com.boco.study; /** * 题目详情 给定一个字符串,仅由a,b,c 3种小写字母组成. 当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出 ...
- 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)
需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换 ab 不替换 ba 不替换 aba 不替换 aab 替换为 ...
- 给定一个字符串,根据字符出现频率排序--Java实现
题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列. 示例 1: 输入:"tree" 输出:"eert" 解释:'e'出现两次,'r'和't' ...
- 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。
题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...
- 核心API的使用(给定一个字符串,统计每个字符出现的次数)
/** * 给定一个字符串,统计每个字符出现的次数. 如:abdaewrwqask435a1aasd */public class ReplaceString { static int length; ...
- 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,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, 字符串内的其他字 ...
- LeetCode 151:给定一个字符串,逐个翻转字符串中的每个单词 Reverse Words in a String
公众号:爱写bug(ID:icodebugs) 翻转字符串里的单词 Given an input string, reverse the string word by word. 示例 1: 输入: ...
随机推荐
- Unity ContentSizeFitter组件
Content Size Fitter组件,它可以动态改变物体的宽高,但它有一个非常需要注意的点就是,它不是即时刷新,是帧末刷新,这个特性如果没注意会出现一个问题 就是你拿到加了这个组件的宽高本不是你 ...
- spring-boot-starter-webflux
webflux: 反应式编程reactor的产物,采用发布订阅模式,引入netty的nio,比较适合IO密集型应用. 因普遍应用使用的DB链接是IO阻塞型,因此在一般应用中无法体现它的优势.redis ...
- (转)codeblocks 使用研究
原帖:http://github.tiankonguse.com/blog/2014/10/11/codeblocks-shutcut.html 使用前 使用 codeblocks 前肯定是下载安装 ...
- 2021 技术展望丨AV1 在 RTC 应用实践中的现状与展望
线上会议.在线教育.电商直播等多个场景的兴起,也使得实时互动技术从幕后走到台前,得到了更多人的关注.编解码.网络传输.计算机视觉等 RTE 相关的一系列技术也正焕发出更强的生命力.2021 年,在深度 ...
- 在不使用SQL过程化编程的情况下,实现一个条件结构【SQL149 根据指定记录是否存在输出不同情况】
题目地址 https://www.nowcoder.com/practice/f72d3fc27dc14f3aae76ee9823ccca6b 思路 加了3列标记位,来达成目的.不直观而且占用内存,但 ...
- Mathematica处理若干个点电荷的电位电场的一个程序包
来自 Mathematica for Theoretical Physics Electrodynamics, Quantum Mechanics, General Relativity and Fr ...
- day13-SpringBoot整合MyBatis/Plus
SpringBoot整合MyBatis/Plus 1.SpringBoot整合MyBatis 1.1整合案例 需求:整合SpringBoot和Mybatis,向数据库中查询数据. 项目结构: 1.1. ...
- Qt连接不上Linux服务器?
目录 1. Qt连接代码 2. 问题分析(按照顺序排除) 2.1 服务器IP是否能被Ping通? 2.2 客户端中的服务器IP和Port是否填写正确? 2.3 Linux的代码处理是否正确? 2.4 ...
- JAVA基础——常用类(一)
首先认识到--String是不可以变性(final) String:字符串,使用一对""引起来表示. * 1.String声明为final的,不可被继承 * ...
- [Linux]异常配置专题之重复配置的有效性:系统/环境变量 | hosts
1 文由 在项目中经常遇到这种情况,1个hosts文件里同一IP 或 域名存在多个映射配置,那么到底哪个有效?环境变量亦有此问题. 问题本身不难,只是为了避免混淆,进行专门记录,以加深记忆. 2 ho ...