520. Detect Capital

本文介绍了一种算法,用于判断单词中大写字母的使用是否符合特定规则,包括全部大写、全部小写及首字母大写的情况,并提供两种实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a word, you need to judge whether the usage of capitals in it is right or not.

We define the usage of capitals in a word to be right when one of the following cases holds:

  1. All letters in this word are capitals, like "USA".
  2. All letters in this word are not capitals, like "leetcode".
  3. Only the first letter in this word is capital if it has more than one letter, like "Google".
Otherwise, we define that this word doesn't use capitals in a right way.

Example 1:

Input: "USA"
Output: True

Example 2:

Input: "FlaG"
Output: False

Note: The input will be a non-empty word consisting of uppercase and lowercase latin letters.

题目大意:给定一个单词,检查大写字母的使用是否正确。我们定义满足以下三种形式即为正确使用大写字母:

1.所有的字母都是大写,例如“USA”

2.所有的字母都是小写,例如“leetcode”

3.只有首字母是大写(如果这个单词不止有一个字母的话),例如“Google”

注意:输入的单词非空。

如果输入的单词满足上述三个规则,那么返回True,否则返回False。

解题思路:把上面的三条规则读懂后发现,可以把情况分为两大类,一种情况是首字母小写,这时可以判断后面的所有字母是不是全为小写,如果是,返回True,否则,返回False;另一种是首字母大写(如果单词不止一个字母的话,可以再接着分,如果第二个字母也是小写,那么后面所有的字符都得是小写,反之,后面的字符都得是大写)。

这里我设置了一个标志位flag=0,如果出现不符合定义中的规则的情况,让flag变为1,经过循环之后只需要判断flag是否为1即可。

不过代码不够简洁优雅==AC后结果为68.98%

/**
         * 第一种情况,如果第一个字母是小写,检查后面的所有字母是不是全为小写
         * 第二种情况是如果第一个字母是大写,那检查后面是不是所有的字母都是大写或都是小写
         * 
         */
		int len = word.length();
		int flag = 0;
		if(len==1){return true;}
        //如果首字母小写,判断后面的字母有没有不是小写的
		if(word.charAt(0)>='a'&&word.charAt(0)<='z'){
			for(int i=1;i<len;i++){
					if(word.charAt(i)<'a'||word.charAt(i)>'z'){
						flag = 1;
					}
			}
			if(flag==1){return false;}	
		}
        //如果首字母大写,第二个字母也是大写,判断后面有没有不是大写的
		else if(word.charAt(0)>='A'&&word.charAt(0)<='Z'&&word.charAt(1)>='A'&&word.charAt(1)<='Z'){
			for(int i=2;i<len;i++){
			if(word.charAt(i)<'A'||word.charAt(i)>'Z'){
				flag = 1;
			}
			}
			if(flag==1){return false;}
		}
        //如果首字母大写,第二个字母小写,判断后面有没有不是小写的
		else if(word.charAt(0)>='A'&&word.charAt(0)<='Z'&&word.charAt(1)>='a'&&word.charAt(1)<='z'){
			for(int i=2;i<len;i++){
				if(word.charAt(i)<'a'||word.charAt(i)>'z'){
					flag = 1;
				}
				}
				if(flag==1){return false;}
		}

		return true;

然后看了一种3行搞定的,只需要统计大写字母的个数,确实很赞,不过效率为42.22%:

int count=0;
		for(char c:word.toCharArray()){
			if('Z'-c>=0) count++;
		}
		return (count==0||count==word.length()||('Z'-word.charAt(0)>=0&&count==1));




你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【使用Python构建回测系统测试选股代码的有效性?用2018-2024年全A股周期回测验证此代码选股逻辑的准确性和胜率,评估月胜率达到多少?评估有效信号准确率达到多少?】,同时此代码还有什么可提升的空间,提出可行性的优化建议和方案,如何选到选股胜率达到月胜率提高至75%以上,有效信号准确率95%以上,选到资金持续流入,股票市场情绪启动,盘中异动启动主升浪的股票,及日线盘中预警选股和盘后选股。请帮我检查并改正错误点补全正确代码,优化选股逻辑和参数计算关系和信号触发条件,并替换为通达信支持的函数,生成优化后完整代码。我的原始代码如下:【{——智能估值体系V8——} DYNPETTM:=IF(FINANCE(33)>2.5E8 AND FINANCE(1)>1.2E8, CLOSE/MAX(FINANCE(33)/FINANCE(1),0.82*IF(INBLOCK('沪深300'),1.12,1)), 999); PB_RATE:=IF(FINANCE(34)>0.68*VOL_REGIME_NEW/0.028 AND CLOSE>4.2, CLOSE/(FINANCE(34)*0.78 + FINANCE(34,1)*0.22*EXP(-0.18*VOL_REGIME_NEW)), 999); PEG_VAL:=DYNPETTM/MAX((FINANCE(54)/FINANCE(54,1)*100-100),0.68*VOL_REGIME_NEW/0.028); {——分形波动率V8——} VOL_REGIME_NEW:=DMA(STD(C,89)/MA(C,89)*SQRT(144),34)*(1+0.18*SIN(2*3.1416*BARSLAST(CROSS(VOL_REGIME,0.02))/55)); VAR_PERIOD:=IF(VOL_REGIME_NEW<0.012,233, IF(VOL_REGIME_NEW<0.028*EXP(-0.12*HSL),144, IF(VOL_REGIME_NEW<0.055*MA(C,21)/MA(C,55),55,34))); FAST_LEN:=BARSLAST(CROSS(VOL_REGIME_NEW,0.025*HSL))+21; SLOW_LEN:=CEILING(VAR_PERIOD*(1.618-IF(VOL_REGIME_NEW>0.15,0.22*VOL_REGIME_NEW,0.06))); {——九维情绪引擎V9——} MARKET_SENTI:=EMA(ADVANCE/DECLINE,13)*0.42*IF(C>MA(C,233),1.18,0.88) + EMA(AMOUNT/REF(AMOUNT,5),13)*0.32*POW(VOL_REGIME_NEW,0.5) + EMA((HSL-REF(HSL,8))/REF(HSL,8),21)*0.18*IF(CAPITAL>8E9,1.22,1) + EMA(LARGE_INFLOW(3)/FINVALUE(0),8)*0.08*IF(WEEKDAY==5,1.12,1) + 0.18*(IF(LARGE_ORDER(2)>REF(LARGE_ORDER(2),8)*1.28,1,0)); HOT_INDEX:=SMA(SUM(IF(C>DYNAINFO(58)*1.028,V/FINVALUE(7)*100,0),21)/ MA(V,21)*2.28,13,1)*IF(CAPITAL>8E9,1.22,1)*IF(HSL>3,1.18,0.92); {——资金流验证V8——} CAPITAL_INFLOW_NEW:=SUM(LARGE_INFLOW(3),13)/SUM(LARGE_INFLOW(3),55)>MAX(0.92,0.8+0.12*VOL_REGIME_NEW) AND SUM(IF(C>O*1.028 AND C>MA(C,21),V,0),13)/SUM(V,13)>0.82*IF(MONTH_TREND,1.12,1) AND (AMOUNT-REF(AMOUNT,13))/REF(AMOUNT,13)>0.42*EXP(0.08*WEEK_MACD) AND EVERY(LARGE_ORDER(2)>0.72,8) AND CHIPSDIFF(8,21)>0.32*VOL_REGIME_NEW/0.028 AND HKHOLDDIFF(5)>0.08*IF(INBLOCK('港股通'),1.22,1); {——信号合成V9——} FINAL_SIGNAL:=TREND_CONFIRM AND (MONTH_TREND*0.32 + WEEK_MACD>REF(WEEK_MACD,5)*1.88*0.28 + DAY_BREAK*0.22 + MIN30_BREAK*0.18 + (MARKET_SENTI>4.8)*0.15 + (HOT_INDEX>3.8)*0.12 + (PEG_VAL<0.48)*0.18 + (DYNPETTM<8.2)*0.15 + CAPITAL_INFLOW_NEW*0.28)>=0.92*IF(VOL_REGIME_NEW>0.05,1.08,1) AND BARSLAST(FINAL_SIGNAL)>MAX(89,SLOW_LEN) AND INDUSTRY_BETA(C,IND_NAME,144)<0.88; {——智能止损V6——} STOP_LOSS:=C<EMA(L,21)*0.92*IF(VOL_REGIME_NEW>0.15,0.95,1) OR (V>MA(V,89)*8.2 AND C<OPEN*0.968) OR VOL_REGIME_NEW>0.15 AND C<EMA(C,55)*0.88*IF(WEEKDAY>3,0.92,1);】
最新发布
04-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值