- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
LeetCode: 290. 单词规律
描述:
给定一种规律 pattern
和一个字符串 s
,判断 s
是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern
里的每个字母和字符串 s
中的每个非空单词之间存在着双向连接的对应规律。
s
字符串转成字符串数组.pattern
长度不一样, 直接返回falsepattern.charAt(i)
的元素, 首先去判断, 对应的 value值是否重复出现. 如果重复出现了, 就返回false. 没有重复出现就 直接添加到 哈希表中.pattern.charAt(i)
的元素, 就去查看对应的 value
值是否和当前的 str[i]
是否相等, 相等就表示对应有规律. 否则返回 falseclass Solution {
public boolean wordPattern(String pattern, String s) {
String[] str = s.split(" ");
if(pattern.length() != str.length) return false;
Map<Character,String> map = new HashMap<>();
for(int i = 0;i < str.length ;i++){
if(!map.containsKey(pattern.charAt(i))) {
if(map.containsValue(str[i])){
return false;
}else{
map.put(pattern.charAt(i),str[i]);
}
}
}
for(int i = 0; i < str.length; i++) {
if(!map.get(pattern.charAt(i)).equals(str[i])){
return false;
}
}
return true;
}
}
LeetCode: 402. 移掉 K 位数字
描述:
给你一个以字符串表示的非负整数 num
和一个整数 k
,移除这个数中的 k
位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。
num
字符串进行判断, 如果k和字符串长度相等 返回"0"class Solution {
public String removeKdigits(String num, int k) {
if(k == num.length()) return "0";
Stack<Integer> stack = new Stack<>();
for(int i = 0; i < num.length(); i++) {
int tmp = num.charAt(i) -'0';
while(k != 0 && !stack.isEmpty() && stack.peek() > tmp) {
stack.pop();
k--;
}
if(tmp != 0 || !stack.isEmpty()) {
stack.push(tmp);
}
}
while(k != 0 && !stack.isEmpty()) {
stack.pop();
k--;
}
if(stack.isEmpty()) return "0";
StringBuilder res = new StringBuilder();
while(!stack.isEmpty()) {
res.append(stack.pop());
}
return res.reverse().toString();
}
}
LeetCode: 409. 最长回文串
描述:
给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。
在构造过程中,请注意 区分大小写 。比如 “Aa” 不能当做一个回文字符串。
aaa
, 出现了3次, 但可以利用他的偶次, 3-1=2.aaa
, 只记录了偶次的情况, 结束之后, 还能再添加一次a
class Solution {
public int longestPalindrome(String s) {
Map<Character,Integer> map = new HashMap<>();
for(char ch : s.toCharArray()) {
map.put(ch,map.getOrDefault(ch,0)+1);
}
int count = 0;
int ret = 0;
for(Map.Entry<Character,Integer> entry : map.entrySet()) {
if(entry.getValue() % 2 == 0) {
count += entry.getValue();
}else{
count += entry.getValue()-1;
ret = 1;
}
}
return count + ret;
}
}
LeetCode: 459. 重复的子字符串
描述:
给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。
abab
, 第一次移动为 baba
, 第二次移动为 abab
, 第三次移动为 baba
.s
拼接两次, 然后去掉首尾, 再去查找 是否存在 s
class Solution {
public boolean repeatedSubstringPattern(String s) {
String str = s + s;
return str.substring(1,str.length()-1).contains(s);
}
}
LeetCode: 516. 最长回文子序列
描述:
给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。
状态转移方程:
F(i,j) = F(i+1)(j-1) + 2 (s[i] = s[j])
F(i,j) = Math.max(F(i+1)(j),F(i)(j-1)) (s[i] != s[j])
初始状态: F(i,i) = 1
返回结果: F(0,len-1)
由于可以删除某些字符, 所有如果s[i] != s[j] 的时候, 就可以多算一个字符了.
class Solution {
public int longestPalindromeSubseq(String s) {
int[][] dp = new int[s.length()][s.length()];
for(int i = 0; i < s.length(); i++){
dp[i][i] = 1;
}
for(int i = s.length()-2; i >= 0; i--) {
for(int j = i+1; j < s.length(); j++){
if(s.charAt(i) == s.charAt(j)) {
dp[i][j] = dp[i+1][j-1] + 2;
}else{
dp[i][j] = Math.max(dp[i+1][j],dp[i][j-1]);
}
}
}
return dp[0][s.length()-1];
}
}
LeetCode: 520. 检测大写字母
描述:
我们定义,在以下情况时,单词的大写用法是正确的:
给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。
upCount
记录大写字母出现的次数.lowCount
记录小写字母出现的次数.upCount == word,length()
, 那么就满足条件1.lowCount == word.length()
, 那么就满足条件2.upCount == 1 && word.charAt(0)为大写
, 那么就满足条件3.class Solution {
public boolean detectCapitalUse(String word) {
int upCount = 0;
int lowCount = 0;
for(char ch : word.toCharArray()){
if(ch>='a' && ch<='z') {
lowCount++;
}else{
upCount++;
}
}
if(lowCount == word.length()) {
return true;
}
if(upCount == word.length()) {
return true;
}
if(upCount == 1 && word.charAt(0) >= 'A' && word.charAt(0) <= 'Z'){
return true;
}
return false;
}
}
我有两个关于这段代码的问题。 double*** pdata 和 int*** pmask 是什么意思?指向指针的指针?为什么或何时需要这样做? int 和 double 是不同的类型,double*
谁能用英文解释一下这是怎么回事? std::vector cats; //I get that cats is a vector of Cat objects if (std::find(cats.b
在C中,下列声明有区别吗: float DoSomething( const float arr[] ); 对比 float DoSomething( const float* arr ); 一个比另
我到 question 36我认为这很简单。像往常一样,我显然错了。我正在尝试在 Python 中执行此操作(因为我不知道 Python)。我的代码如下。我得到 19 作为输出,这显然是不正确的。我不
我已经通读了 MSDN 上的 Winsock2 文档,但如果有人能提供帮助,我仍然需要澄清一些事情。 我计划做一些类似于您在使用 WSAAsyncSelect() 时获得的设置,但使用一个单独的线程。
#include int main () { int *p = (int *)malloc((100*sizeof(int))); p++; free(p); /* do some
我想提供未知的“对象”并返回其成员之一的值。在 C# 中需要响应。 一般来说,我想我正在寻找这个方法的代码公共(public)静态对象 GetObjectMemberValue (object myO
由异常准确的 AI 提供支持的 20 个问题的简单在线游戏。 他们怎么猜得这么好? 最佳答案 您可以将其视为二进制搜索算法。在每次迭代中,我们都会提出一个问题,该问题应该会消除大约一半的可能单词选择。
拜托,有人可以解释一下吗: 如果文档说 STL std::vector finding element speed performace = O(ln(n)),这是什么意思。 O(ln(n)) - 什
我正在尝试通过遵循 Microsoft 为 ADSI API 和 Windows-RS crate 发布的 c++ 示例来使用 Rust 的事件目录。我不太明白这里发生了什么: https://doc
这是处理具有重复元素的单个列表的 nieve 案例,我在处理一些嵌套列表时遇到了麻烦,所以我想先写简单的案例。 所以我有: (defn packDuplicatesIntoLists [lis
我是新来的。我正在尝试解决此练习 Problem 18只是为了加强我的解决能力。我已经编码了答案。该任务要求“在 1,000,000 以下的质数中,有多少个数位之和等于两周中的天数?” (两周是 14
我正在尝试对POCO类中的某些字段进行索引,并将某些属性装饰为“忽略= true”,并且这些字段不应被索引,而应该被存储。我希望这些字段出现在搜索结果中,但不应作为索引。 我正在尝试对应索引的几个字段
我是编码的新手,正在尝试通过完成 Project Euler 问题来学习 Swift。我似乎有导致大量错误的不同版本的 Swift 代码。如果您对我的问题的格式有任何建议以供将来引用,请告诉我,谢谢。
对于problem statement在 google codejam 2008:第 1A 轮问题 3 In this problem, you have to find the last three
我是一名优秀的程序员,十分优秀!