c++-string-1

 解答注意:

我写的时候考虑了:

1) "     my"(设置flag,为true时表示上一个是非空格字符)

2) "hello John"(最后不是空格结尾,但应该count++)

不过还是WA一次,因为第一次是把if(s[i] != ' ')放在了后面,则对这种"a",会判断错误。

 1 int countSegments(string s) {
 2         int count = 0;
 3         bool flag = false;
 4         int i;
 5         for (i = 0; i < s.length(); i++) {
 6             if(s[i] != ' ') {
 7               flag = true;
 8               //continue;
 9             }
10             if(flag == true && s[i] == ' ' || flag == true && i == s.length() - 1) {
11                 count ++;
12                 flag = false;
13             }
14         }
15         return count;
16     }

解题思路:错误情况只有一种,即一个字母匹配了多个不同字母,如"foo"和"bar"。但是map只保证key是唯一的,所以需要检查key-value对是否唯一。

所以在插入新的之前,需要检查是不是已经有了这样的value-key对。几次WA都是没检查这个,不走心啊。

bool isIsomorphic(string s, string t) {
        map<char,char> m;
        int i;
        for (i = 0; i < t.length(); i++) {
            if (m.find(t[i]) != m.end()) {
                if (m.find(t[i])->second == s[i]) {
                    continue;
                } else {
                    return false;
                }
            } else {
                map<char,char>::iterator it;
                for (it = m.begin(); it != m.end(); it++)
                   if(it->second == s[i])
                     return false;
                m.insert(pair<char,char>(t[i], s[i]));
            }
        }
        return true;
    }

 

解题思路:这个直接模拟加法的过程就好,从后往前加。昨天脑子卡了,一直在纠结num1和num2长度不同是不是要分别考虑,加了奇怪的判断,结果老是有错。

其实直接给不足的位置补零,然后统一操作就好了啊摊手。哦,string这个insert函数蛮灵活的。

string addStrings(string num1, string num2) {
        string str="";
        int flag = 0;
        int len;
        int val = 0;
        int len1 = num1.length();
        int len2 = num2.length();
        if (len1 > len2) {
            len = len1;
// insert(pos, len, char) num2.insert(num2.begin(), len1
-len2, '0'); } else { len = len2; num1.insert(num1.begin(), len2-len1, '0'); } int i; for (i = len-1; i >= 0; i--) { val = num1[i] - '0' + num2[i] - '0' + flag; flag = val / 10; str.insert(str.begin(), val % 10 + '0'); } if (flag != 0) str.insert(str.begin(), flag + '0'); return str; }
原文地址:https://www.cnblogs.com/pxy7896/p/6441673.html