问题:删列造序 ||

给定由 N 个小写字母字符串组成的数组 A,其中每个字符串长度相等。

选取一个删除索引序列,对于 A 中的每个字符串,删除对应每个索引处的字符。

比如,有 A = ["abcdef", "uvwxyz"],删除索引序列 {0, 2, 3},删除后 A 为["bef", "vyz"]

假设,我们选择了一组删除索引 D,那么在执行删除操作之后,最终得到的数组的元素是按 字典序(A[0] <= A[1] <= A[2] ... <= A[A.length - 1])排列的,然后请你返回 D.length 的最小可能值。

示例 1:

输入:["ca","bb","ac"]
输出:1
解释:
删除第一列后,A = ["a", "b", "c"]。
现在 A 中元素是按字典排列的 (即,A[0] <= A[1] <= A[2])。
我们至少需要进行 1 次删除,因为最初 A 不是按字典序排列的,所以答案是 1。

示例 2:

输入:["xc","yb","za"]
输出:0
解释:
A 的列已经是按字典序排列了,所以我们不需要删除任何东西。
注意 A 的行不需要按字典序排列。
也就是说,A[0][0] <= A[0][1] <= ... 不一定成立。

示例 3:

输入:["zyx","wvu","tsr"]
输出:3
解释:
我们必须删掉每一列。

提示:

  1. 1 <= A.length <= 100
  2. 1 <= A[i].length <= 100

链接:https://leetcode-cn.com/contest/weekly-contest-114/problems/delete-columns-to-make-sorted-ii/

分析:

目标是删除最小的行数是的剩余是按照字典排序

1.字典排序:从头到尾逐个字符对比,如果相同比下一个,直到有区别或者结束。

azz  < baa

abc < abd

2.如果是多个字符串对比,如果某个已经比出大小,那么没必要看后面的

str1:a?????

str2:a?????

str3:c?????

str1<=str2<str3,后面只需要比较str1 str2

3.如果字符串组中是严格有序的,即没有相等的,就可以直接得出结果

str1:a?????

str2:b?????

str3:c?????

str1<str2<str3,没必要比较后面的。

4,如果不是有序的在需要将该列去除

最终做法即为依次每个string取一个字符,看是否有序以及是否需要继续比下去,

如果无序,删除该列

如果有序,也不需要继续比,返回结果

如果有序,但是需要继续比,那就继续比。

AC Code:

 class Solution {
public:
//dp
int minDeletionSize(vector<string>& A) {
int ret = ;
vector<string> strs;
if (A.size() <= )
{
return ;
}
if (A[].size() < )
{
return ;
}
for (unsigned int i = ; i < A.size(); i++)
{
string tmp = "";
tmp += A[i][];
strs.emplace_back(tmp);
}
int neednextcheck = ;
bool isordered;
isordered = IsOrdered(strs, neednextcheck);
if (isordered == true && neednextcheck == )
{
return ret;
}
if (isordered == false)
{
ret++; for (unsigned int i = ; i < A.size(); i++)
{
string tmp = "";
strs[i]=tmp;
}
}
for (unsigned int i = ; i < A[].size(); i++)
{
vector<string> tmpstrs(strs);
for (unsigned int j = ; j < A.size(); j++)
{
tmpstrs[j] += A[j][i];
}
isordered = IsOrdered(tmpstrs, neednextcheck);
if (isordered == true && neednextcheck == )
{
return ret;
}
if (isordered == false)
{
ret++;
}
else
{
strs = tmpstrs;
}
}
return ret;
}
bool IsOrdered(vector<string> strs,int& neednextcheck)
{
bool ret = true;
vector<string> OrderedStrs(strs);
//string tmp = strs[0];
neednextcheck = ;
for (unsigned int i = ; i < strs.size(); i++)
{
if (strs[i] == strs[i - ])
{
neednextcheck = ;
break;
}
}
sort(OrderedStrs.begin(), OrderedStrs.end());
for (unsigned int i = ; i < strs.size(); i++)
{
if (OrderedStrs[i] != strs[i])
{
return false;
}
} return ret;
}
};

其他:

1,忽略了好多提示,一方面提示有思路上的提示,另一方面可以避免无用功,比如这个,有明确提到A.length A[0].length 都是大于等于1的,取[0]位置的值完全可以直接取的

3,第一code:

 #pragma GCC optimize("O3", "unroll-loops")
// God Help me !!
#include <bits/stdc++.h>
using namespace std;
// #define watch(x) cout << (#x) << " is " << (x) << endl #define FILES freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout)
#define FAST ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define FIXED cout << fixed << setprecision(20)
#define RANDOM srand(time(nullptr))
#define int long long
// #define MOD 1000000007
#define sz(a) (ll)a.size()
#define pll pair<ll,ll>
#define rep(i,a,b) for(int i=(int)a;i<(int)b;i++)
#define sep(i,a,b) for(int i=(int)a;i>=(int)b;i--)
#define mll map<int,int>
#define vl vector<int>
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define all(a) a.begin(),a.end()
#define F first
#define S second
#define endl "\n"
#define MAXN6 3000005
#define MAXN3 3005
#define MAXN5 300005 #define watch(...) ZZ(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1> void ZZ(const char* name, Arg1&& arg1){std::cerr << name << " = " << arg1 << endl;}
template <typename Arg1, typename... Args>void ZZ(const char* names, Arg1&& arg1, Args&&... args)
{
const char* comma = strchr(names + , ',');
std::cerr.write(names, comma - names) << " = " << arg1;
ZZ(comma, args...);
} class Solution {
public:
int minDeletionSize(vector<string>& A) {
int n = A.size(), m = A[].size();
int ans = ;
vector<string> B;
for (int i = ; i < n; i++) {
B.push_back("");
}
for (int i = ; i < m; i++) {
bool isOk = true;
for (int j = ; j < n; j++) {
if (B[j] == B[j-] && A[j][i] < A[j-][i]) {
isOk = false;
ans++;
break;
}
}
if (isOk) {
for (int j = ; j < n; j++)
B[j] += A[j][i];
}
}
return ans;
}
};

LeetCode955删列造序 ||的更多相关文章

  1. [Swift]LeetCode955. 删列造序 II | Delete Columns to Make Sorted II

    We are given an array A of N lowercase letter strings, all of the same length. Now, we may choose an ...

  2. Leetcode944. Delete Columns to Make Sorted删列造序

    给定由 N 个小写字母字符串组成的数组 A,其中每个字符串长度相等. 选取一个删除索引序列,对于 A 中的每个字符串,删除对应每个索引处的字符. 所余下的字符串行从上往下读形成列. 比如,有 A = ...

  3. [Swift]LeetCode960. 删列造序 III | Delete Columns to Make Sorted III

    We are given an array A of N lowercase letter strings, all of the same length. Now, we may choose an ...

  4. Hive 按某列的部分排序 以及 删列操作

    脑袋果然还是智商不足. 涉及到的小需求: 某个表test 有一列 tc: a字符串+b字符串+c字符串 拼接组成 把test表,按b字符串排序 输出 遇到的问题: select 里面必须包含 orde ...

  5. C#调用存储过程中事务级临时表返回DataTable列乱序解决办法

    string result = strSqlResult.Substring(3).Trim().Replace("\n", "").Replace(" ...

  6. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  7. Leetcode题解 - 贪心算法部分简单题目代码+思路(860、944、1005、1029、1046、1217、1221)

    leetcode真的是一个学习阅读理解的好地方 860. 柠檬水找零 """ 因为用户支付的只会有5.10.20 对于10元的用户必须找一个5 对于20元的用户可以找(三 ...

  8. leetcode难题

    4 寻找两个有序数组的中位数       35.9% 困难     10 正则表达式匹配       24.6% 困难     23 合并K个排序链表       47.4% 困难     25 K ...

  9. leetcode 0208

    目录 ✅ 108. 将有序数组转换为二叉搜索树 描述 解答 py [tdo rev 0208]py知识:if not x: 和if x is not None:和if not x is None:使用 ...

随机推荐

  1. Win7 桌面图标消失

    win7 桌面图标消失或任务栏也消失,可以按Ctrl+Shift+Esc键调出任务管理器,然后点击文件——新建任务,输入explorer.

  2. POJ 3321 Apple Tree DFS序 + 树状数组

    多次修改一棵树节点的值,或者询问当前这个节点的子树所有节点权值总和. 首先预处理出DFS序L[i]和R[i] 把问题转化为区间查询总和问题.单点修改,区间查询,树状数组即可. 注意修改的时候也要按照d ...

  3. nginx中文手册内容说明

    1.什么是nginx? Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接, ...

  4. UiPath Studio 快捷键

    掌握快捷键可以事半功倍,写一下比较重要的 1. Ctrl + J  插入代码片段 2. Ctrl + K  快速建变量 3. Ctrl + L  打开日志文件夹 4. Ctrl + F4  关闭当前机 ...

  5. 实现多行文字居中方法(兼容IE6)

    <p class="mulit_line"> <span style="font-size:12px;">这里是高度为150像素的标签内 ...

  6. 实现简单Restful API

    1. 首选我们通过 http://start.spring.io/ 网址生成一个基础spring boot 项目,截图配置如下: 点击 generate Project 按钮生成并下载基础项目 2. ...

  7. h5新增属性本地存储

    ---恢复内容开始--- 存储的两种类型: localStorage 和 sessionStorage localstorage:没有时间限制的数据存储 sessionStorage  针对一个ses ...

  8. Android 常用RGB值及名称

    Android   常用RGB值及名称 颜  色 RGB值 英文名 中文名 #FFB6C1 LightPink 浅粉红 #FFC0CB Pink 粉红 #DC143C Crimson 深红/猩红 #F ...

  9. 微信企业号升级企业微信后zabbix告警发不出去

    首先看下微信的脚本 #!/bin/bash ###SCRIPT_NAME:weixin.sh### ###send message from weixin for zabbix monitor### ...

  10. IE Proxy Swich - IE 代理切换工具

    通过此工具可方便的切换计算机系统代理设置的开关,无需重启IE 来激活设置 下载 环境要求: 可能需要.NET 4.0 以上平台, 其他平台未测试 截图与功能如下 支持快捷方式参数 我个人习惯是在桌面 ...