2015-12-09

来源:互联网 发布:html5 微场景源码 编辑:程序博客网 时间:2024/06/05 17:31

1.leetcode 字符处理

(1)仅看字符串中字母数字,是否构成回文。时间O(n),空间O(1)

bool isPalindrome(string s) {        string str;        int i = 0 , j= s.length()-1;        while (i < j){            while(i<j && !(s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z' || s[i] >= '0' && s[i] <= '9')) ++i;            while(i<j && !(s[j] >= 'a' && s[j] <= 'z' || s[j] >= 'A' && s[j] <= 'Z' || s[j] >= '0' && s[j] <= '9')) --j;            //cout<<i<<"      "<<j<<endl;            if(!(s[i] == s[j] || s[i]-'a' == s[j]-'A' || s[i] - 'A' == s[j] - 'a')) return false;            ++i;            --j;        }        return true;}


  • 自己测试的时候,想从文件输入到string中,查到了两个方法。IOStream著名专家Dietmar Kuehl给过两个方法 

   std::ifstream in("some.file"); 

   std::istreambuf_iterator<char> beg(in), end; 

   std::string str(beg, end); 

或 

   std::ifstream in("some.file"); 

   std::ostringstream tmp; 

   tmp << in.rdbuf(); 

   std::string str = tmp.str();

  • 字母数字,C++中有可以直接用的函数:

isalnum(c)判断c(char)是否是英文字母或者数字,若参数c 为字母或数字( 0 ~ 9  a ~ z  A ~ Z )则返回非 0,否则返回 0。

int toupper(int c);该函数等效返回大写字母C,如果存在这样的值,否则c保持不变。返回值可以隐式转换为char的int值。

int tolower(int c);函数等效返回小写字母c,如果存在的值,否则c保持不变。返回值可以隐式char为int值。

(2)找到haystack中是否包含needle,包含返回位置i,不包含返回-1;
int strStr(string haystack, string needle) {        //暴力,想一下,如果为空串时候,程序结果是否正确        if(haystack.length()< needle.length()) return -1;        int i,j;        for(i = 0; i <= haystack.length()- needle.length(); ++i){            int k = i;            for(j = 0; j < needle.length(); ++j){                if(haystack[k] != needle[j]) break;                else k++;            }            if(j == needle.length()) return i;        }        return -1;}
<ul><li><span style="font-family: 微软雅黑, 'Microsoft Yahei', Arial, Helvetica, sans-serif;">二层循环可以用j当作索引增量,比较haystack[i+j]与needle[j]</span></li></ul>
<ul><li><span style="font-family: AdobeSongStd-Light; font-size: 8pt;">暴力算法的复杂度是 <span style="font-family: CMMI9; font-size: 8pt;"><em>O </em><span style="font-family: CMR9; font-size: 8pt;">( <span style="font-family: CMMI9; font-size: 8pt;"><em>m </em><span style="font-family: CMSY9; font-size: 8pt;"><em>∗ </em><span style="font-family: CMMI9; font-size: 8pt;"><em>n </em><span style="font-family: CMR9; font-size: 8pt;">)<span style="font-family: AdobeSongStd-Light; font-size: 8pt;">,代码如下。更高效的的算法有 <span style="font-family: TimesNewRomanPSMT; font-size: 8pt;">KMP <span style="font-family: AdobeSongStd-Light; font-size: 8pt;">算法、 <span style="font-family: TimesNewRomanPSMT; font-size: 8pt;">Boyer-Mooer <span style="font-family: AdobeSongStd-Light; font-size: 8pt;">算法和<span style="font-family: TimesNewRomanPSMT; font-size: 8pt;">Rabin-Karp <span style="font-family: AdobeSongStd-Light; font-size: 8pt;">算法。面试中暴力算法足够了,一定要写得没有 <span style="font-family: TimesNewRomanPSMT; font-size: 8pt;">BUG</span><br style="orphans: 2; text-align: -webkit-auto; widows: 2;" /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></li></ul>

0 0
原创粉丝点击