【520】Detect Capital

本文介绍了一种用于检测单词中大写字母使用是否正确的算法。该算法适用于三种情况:全部大写、全部小写及仅首字母大写的情况,并提供了一个C++实现示例。

题目:

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、大写字母的数目等于字符长度;

2、大写字母的数目等于0;

3、大写字母的数目为1且首字母为大写。

因此只要从首字母开始逐个遍历得到大写字母的数目,再根据上述情况进行判断即可。

代码实现:

class Solution {
public:
    bool detectCapitalUse(string word) {
        int countU=0;
        for (int i=0; i<word.size();i++) {
            if (isupper(word[i]))
                countU++;
        }
        return countU==word.size()||countU==0||(countU==1&&isupper(word[0]));
    }
};

附:C++ STL string的一些用法

1:string对象的定义和初始化以及读写
string s1; 默认构造函数,s1为空串
string s2(s1); 将s2初始化为s1的一个副本
string s3("valuee"); 将s3初始化一个字符串面值副本
string s4(n,'c'); 将s4 初始化为字符'c'的n个副本
cin>>s5; 读取有效字符到遇到空格
getline(cin,s6); 读取字符到遇到换行,空格可读入,知道‘\n’结束(练习在下一个代码中),
getline(cin,s7,'a'); 一个直到‘a’结束,其中任何字符包括'\n'都能够读入3:string对象中字符的处理(头文件cctype)
isalnum(c) 如果c是字母或数字,返回 true
isalpha(c) 如果c是字母,返回true
iscntrl(c) c是控制符,返回true
isdigit(c) 如果c是数组,返回true
isgraph(c) 如果c不是空格,则可打印,,则为true
islower(c) 如果c是小写字母,则为true
isupper(c) 如果c是大写字符,则为true
isprint(c) 如果c是可打印的字符,则为true
ispunct(c) 如果c是标点符号,则为true
isspace(c) 如果c是空白字符,则为true
isxdigit(c) 如果c是十六进制数,则为true
tolower(c) 如果c是大写字符,则返回其小写字母,否则直接返回c
toupper(c) 跟tolower相反


2:string对象操作
s.empty() 判断是否为空,bool型
s.size() 或 s.length() 返回字符的个数
s[n] 返回位置为n的字符,从0开始计数
s1+s2 连接
s1=s2 替换
s1==s2 相等,返回true或false

!=,<,<=,>,>= 字符串比较,两个字符串短的与长的前面匹配,短的小于长的


3:string对象中字符的处理
isalnum(c) 如果c是字母或数字,返回 true
isalpha(c) 如果c是字母,返回true
iscntrl(c) c是控制符,返回true
isdigit(c) 如果c是数组,返回true
isgraph(c) 如果c不是空格,则可打印,,则为true
islower(c) 如果c是小写字母,则为true
isupper(c) 如果c是大写字符,则为true
isprint(c) 如果c是可打印的字符,则为true
ispunct(c) 如果c是标点符号,则为true
isspace(c) 如果c是空白字符,则为true
isxdigit(c) 如果c是十六进制数,则为true
tolower(c) 如果c是大写字符,则返回其小写字母,否则直接返回c
toupper(c) 跟tolower相反

你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【使用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、付费专栏及课程。

余额充值