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; }