栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

944、删列造序+string回顾

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

944、删列造序+string回顾

文章目录
      • 零、导言
      • 一、题目描述
      • 二、题目分析
      • 三、代码实现
      • 四、总结回顾一下字符串 `string` 常用的知识
        • 1、初始化方法
        • 2、字符串增删改查
        • 3、字符串比较
        • 4、字符串中一些常用的字符判断
        • 5、数字字符串和数之间的转换

零、导言

每天根据每日一题的内容回顾   C/C++   的语法和一些实用刷题知识。 texttt{每天根据每日一题的内容回顾 C/C++ 的语法和一些实用刷题知识。} 每天根据每日一题的内容回顾 C/C++ 的语法和一些实用刷题知识。

一、题目描述

944、删列造序

给你由 n 个小写字母字符串组成的数组 strs,其中每个字符串长度相等。
这些字符串可以每个一行,排成一个网格。例如,strs = ["abc", "bce", "cae"] 可以排列为:
abc bce cae
你需要找出并删除 不是按字典序升序排列的 列。在上面的例子(下标从 0 开始)中,列 0('a', 'b', 'c')和列 2('c', 'e', 'e')都是按升序排列的,而列 1('b', 'c', 'a')不是,所以要删除列 1 。
返回你需要删除的列数。

示例:
输入: strs   =   ["cba","daf","ghi"] texttt{strs = ["cba","daf","ghi"]} strs = ["cba","daf","ghi"]
输出: 1 texttt{1} 1
解释:网格示意如下:
cba   daf   ghi texttt{cba daf ghi} cba daf ghi
列 0 texttt{0} 0 和列 2 texttt{2} 2 按升序排列,但列 1 texttt{1} 1 不是,所以只需要删除列 1 texttt{1} 1 。

二、题目分析

    (1)简单题加上数据量很小直接遍历就好,遍历每个字符串的对应位置,判断是否 按字典序排列的 就可以了。
    (2)简单题一般遍历枚举都可以了,就像是周赛的一二题,直接遍历枚举基本上就可以通过了。

三、代码实现
class Solution {
public:
    int minDeletionSize(vector& strs) {
        int cnt = 0;
        int i, j;
        int n = strs.size();
        int m = strs[0].size();
        for(i = 0; i < m; ++i){
            for(j = 1; j < n; ++j){
                if(strs[j-1][i] > strs[j][i]){
                    ++cnt;
                    break;
                }
            }
        }
        return cnt;
    }
};
四、总结回顾一下字符串 string 常用的知识

这里总结的一些用法是刷题到目前为止的比较常用的用法。关于 string texttt{string} string 字符串的用法实在是太多了,还有 C++11 texttt{C++11} C++11 中的一些新的用法。后续用到了再继续更新!

1、初始化方法

C++里面的 string 是可以作为容器存在的,自然就支持一些类似 vector<> 容器的操作;可以回顾一下这篇题解中 vector<>容器的一些初始化操作,string 容器有着类似的初始化方法;

2、字符串增删改查
// 增删改查
#include 
#include  // 头文件一定不要忘记添加

int main(){
    
    
return 0;
}
3、字符串比较

通常会看到这样的比较表达式 str1 > str2 这是什么意思呢?表示的是这两个字符串之间进行 字典序比较 ,符合字典序输出为 true ,否则输出为 false;

4、字符串中一些常用的字符判断

熟练掌握这个 C++11 中标准的库函数,可以快速完成编程。但是对于初学者来说建议多想想这些是怎么实现的,熟练之后再直接使用库函数。

用法解释
isspace() texttt{isspace()} isspace()判断当前字符是否是空格,是输出为true,否则输出为false
isdigit() texttt{isdigit()} isdigit()判断当前字符是否是数字
isalpha() texttt{isalpha()} isalpha()判断当前字符是否是字母
islower() texttt{islower()} islower()判断当前字符是否是小写字母
isupper() texttt{isupper()} isupper()判断当前字符是否是大写字母
tolower() texttt{tolower()} tolower()将当前字符转化为小写字母
toupper() texttt{toupper()} toupper()将当前字符转化为大写字母
5、数字字符串和数之间的转换

有时候在一些算法题当中,先对数字进行字符串化,再进行进一步操作会很方便。比如给定一个num 判断它是不是 回文数 ,我们就可以先将它转化为字符串,再用 双指针 判断是否是回文数。肯定也会有其他方法来实现,只是先字符串化再判断,我们比较熟悉而已。

// 字符串和数字之间如何相互转换?
1、库函数
    std::to_string() // 将数字常量转换为字符串
    
    // C++的字符处理函数,都是将字符串转化为 int 输出,形参列表不同
    std::atoi()	// 形参是 const *char 
    // 对于一个 string 类型的字符串要调用c_str()转化为 char 类型才能作为 atoi 的实参
    std::stoi()	// 型参是 const *string
    
2、atoi()与stoi()使用注意
    ①、atoi()不会做范围检查,超出上限则输出上界,超出下限输出下界
    ②、stoi()会做范围检查,默认范围是在 int 范围内,超出范围会报错 runtime error!

3、函数实现(字符串流的方式)
    #include 	// 包含的头文件
    #include 
    int str2Int(string s){
    	int ret;
    	stringstream ss;
    	ss << s;
    	ss >> ret;
    
    	return ret;
	}

	// 字符串流的方法
	#include 	// 包含的头文件
    #include 
    string int2Str(int val){
        string ret;
        stringstream ss;
        ss << val;
    	ret = ss.str();
        
        return ret;
	}
	
4、也可以通过借助 vector 容器的方式,实现数字字符串与数字之间的转换
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879382.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号