zoukankan      html  css  js  c++  java
  • 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; }
  • 相关阅读:
    【数据结构】算法 Tree Sub Structure 树的子结构
    【数据结构】算法 Binary Search Tree find Kth largest Node 二叉搜索树的第k大节点
    【数据结构】算法 Count Complete Tree Nodes 完全二叉树的节点个数
    【数据结构】算法 合并K个有序链表Merge k Sorted Lists
    JVisualVM 插件安装中出现网络问题
    [ISSUE] Logback TimeBasedRollingPolicy not rolling every day.
    【数据结构】算法 计算数组中的逆序对
    JQ为元素添加class
    时间戳转换成日期
    JS拖拽
  • 原文地址:https://www.cnblogs.com/pxy7896/p/6441673.html
Copyright © 2011-2022 走看看