> 文章列表 > (leetcode)20. 有效的括号 13. 罗马数字转整数 14. 最长公共前缀

(leetcode)20. 有效的括号 13. 罗马数字转整数 14. 最长公共前缀

(leetcode)20. 有效的括号 13. 罗马数字转整数 14. 最长公共前缀

目录

 20. 有效的括号

思路 

 代码

  13. 罗马数字转整数

思路 

代码

14. 最长公共前缀

思路

代码


 

 20. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
 

示例 1:

输入:s = "()"
输出:true
示例 2:

输入:s = "()[]{}"
输出:true
示例 3:

输入:s = "(]"
输出:false
 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses

 

思路 

结合代码去看

 代码

bool isValid(char * s)
{char b[10000] = {0};int top = 0;int i = 0;int len = strlen(s);while(s[i] != '\\0'){if(s[i] == '(' || s[i] == '[' || s[i] == '{'){top++;if(s[i] == '('){b[top] = ')';}else if(s[i] == '['){b[top] = ']';}else if(s[i] == '{'){b[top] = '}';}}else{if(b[top] != s[i]){return false;}else{top--;}}i++;}if(top==0){return true;}return false;
}

 

  13. 罗马数字转整数

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。

示例 1:

输入: s = "III"
输出: 3
示例 2:

输入: s = "IV"
输出: 4
示例 3:

输入: s = "IX"
输出: 9
示例 4:

输入: s = "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.
示例 5:

输入: s = "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.
 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/roman-to-integer

思路 

弄得书写规则就能会写,看代码吧

代码

int romanToInt(char * s)
{int i= 0;int count = 0;int len = strlen(s);for(i = 0; i < len; i++){if(s[i] == 'I'){if(i < len - 1 && (s[i + 1] == 'V' || s[i + 1] == 'X')){ count-=1;}else{count += 1;}}else if(s[i] == 'V'){count+=5;}else if(s[i] == 'X'){if(i < len - 1 && (s[i + 1] == 'L' || s[i + 1] == 'C')){ count-=10;}else{count += 10;}}else if(s[i] == 'L'){count+=50;}else if(s[i] == 'C'){if(i < len - 1 && (s[i + 1] == 'D' || s[i + 1] == 'M')){ count-=100;}else{count += 100;}}else if(s[i] == 'D'){count+=500;}else if(s[i] == 'M'){count+=1000;}else{break;}}return count;
}

14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:

输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
 

提示:

1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-common-prefix

思路

先找出最短的那个 

 

从i = 1来就不会越界 

 

所有元素全走完才行(就是i == srtsSize)(就是都要比较是不是都有这个前缀,中途break,可不行) 

 

 以上是要注意的地方,剩下的应该看代码就能懂

代码

char* longestCommonPrefix(char** strs, int strsSize) {int len = 0;int i = 0;int j = 0;len = strlen(strs[0]);for (i = 1; i < strsSize; ++i){if (strlen(strs[i]) < len){len = strlen(strs[i]);}}for (j = 0; j < len; ++j){for (i = 1; i < strsSize; ++i){if (strs[i][j] != strs[i - 1][j]){break;}}if (i != strsSize){break;}}strs[0][j] = '\\0';return strs[0];
}