字符串需要注意的一些细节

  1. 输入字符串中带空格 使用getline(cin, s);其中需要包含头文件#include <string>
  2. 使用toupper()tolower()将字符转换大小写
  3. 数字数组排序后去重
sort(arr.begin(), arr.end());
arr.erase(unique(arr.begin(), arr.end()), arr.end());
  1. 相同字符串str1.append(5,"0");
  2. 数字字符串去重:
  3. 统计字符串中字符个数
  4. string中append的用法
string s1 = "wang";
s1.append(3, '!');
// s1 = wang!!!
  1. s.substr(pos, n):第一个参数是起始位置,第二个参数是切割长度,单个参数默认pos后全取
/*长度为8拆分每个字符串后输出; 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理*/	
	string str;
	while (getline(cin, str)) {
    
    
		while (str.size() > 8) {
    
    
			cout << str.substr(0, 8) << endl;
			str = str.substr(8);
		}
		cout << str.append(8 - str.size(), '0') << endl;   //不够8位的补0
	}
  1. 判断字符是否为字母、数字或非字母数字
  • isalpha
  • isdigit
  • isalnum
  1. 如何遍历map,unordered_map?

    map<int, char> Map; 
    for (auto & element : Map){
          
          
        printf("%d, %c\n", element.first, element.second);
    }
    

    即遍历之后返回的自动类型是一个pair,注意此处map的话返回有顺序的,而unordered_map 没有顺序

  2. 类型转换
    1) char 下的数字到intchar a = '1'; int b = a - '0';

    2) int数字到 stringint a = 12345; string b = to_string(a);

    3) string 到intstring s = "123"; int a = stoi(s);

  3. initiliaze 固定size 某数据类型的2D 向量 :vector<vector<int>> A(m, vector<int>(n, 0))

  4. from vector cosntruct initiliaze a unordered_set

    vector<int> a = {
          
          1,2,3}
    unordered_set Set (a.begin(), a.end());
    

5.用lambda funtion 来定义sort 函数,以252 题为例

sort(intervals.begin(), intervals.end(), [](Interval a, Interval b){return a.start < b.start;});
6.在类中initialize 一个特定size的向量,以303题为例, 即intiliaze 一个向量,然后assign reference

class NumArray{
vector f;

NumArray(){
    f = vector<int> (n+1, 0);
}

}

7.在ascii码里,大小写字母之间的差是32,比如 ‘a’ - ‘A’ = 32。

非常常用的技巧:从某一点开始找到相同的一段:Leetcode151

int j = i;
while (j < s.size() && s[j] != ' ') j++;

删除哈希表中重复的value对应的key

验证回文串

class Solution {
    
    
public:
	bool isPalindrome(string s) {
    
    
		int i = 0, j = s.size() - 1;
        while (i < j){
    
    
            while (!isalnum(s[i]) && i < j) i++; // 跳过非法字符
            while (!isalnum(s[j]) && i < j) j--;
            if (toupper(s[i]) != toupper(s[j]))
                return false;
            i++, j--;
        }
        return true;
    }
};

KMP算法:将 O ( m n ) O(mn) O(mn)降到 O ( m + n ) O(m+n) O(m+n)

猜你喜欢

转载自blog.csdn.net/fly_wt/article/details/100804530