我正在阅读"破解编码面试"一书,我在这里遇到了一些问题,但是我需要帮助比较我对解决方案的回答.我的算法有效,但我很难理解书中的解决方案.主要是因为我不明白一些运营商在做什么.
任务是:"实现一个算法来确定一个字符串是否具有所有唯一字符.如果你不能使用其他数据结构怎么办?"
这是我的解决方案:
public static boolean checkForUnique(String str){
boolean containsUnique = false;
for(char c : str.toCharArray()){
if(str.indexOf(c) == str.lastIndexOf(c)){
containsUnique = true;
} else {
containsUnique = false;
}
}
return containsUnique;
}
Run Code Online (Sandbox Code Playgroud)
它有效,但效率如何?我看到Java中String的索引函数的复杂性是O(n*m)
以下是本书的解决方案:
public static boolean isUniqueChars(String str) {
if (str.length() > 256) {
return false;
}
int checker = 0;
for (int i = 0; i < str.length(); i++) {
int val = str.charAt(i) - 'a';
if ((checker & (1 << val)) > 0) return false;
checker …Run Code Online (Sandbox Code Playgroud) 我想在我的Java应用程序中利用Windows证书库.我能够从Windows-MY加载一个具有我需要的所有别名/证书的密钥库,但在加载它时,我面临一个询问"请插入智能卡"的对话框.如果我在这几次点击取消,他们的密钥库仍然加载正确的内容.
有没有办法压制这个对话框?还有一种方法可以使用Java的Windows证书选择框吗?我在网上看到的唯一答案是:https://social.msdn.microsoft.com/Forums/en-US/52dca221-1e05-44c1-8c45-9e0d4a807853/java-keystoreload-for-windowsmy-pops- up-insert-smart-card-window?forum = windowssecurity,但我不想删除任何内容,因为我不希望用户这样做.
这是我加载密钥库的方式:
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null);
Run Code Online (Sandbox Code Playgroud) 我试图在PHP中为以下EBNF编写一个递归下降解析器:
EXP ::= < TERM > { ( + | - ) < TERM > }
TERM ::= < FACTOR > { ( * | / ) < FACTOR > }
FACTOR ::= ( < EXP > ) | < DIGIT >
DIGIT ::= 0 | 1 | 2 | 3
Run Code Online (Sandbox Code Playgroud)
我按照这个指南,我看到推荐的类似问题.(我发布之前搜索过)
在大多数情况下,我了解它是如何工作的,我理解语法.我认为问题在于我的语法.我是PHP的新手,所以我一直在引用W3Schools.我目前使用我的代码收到以下错误:
Warning: Wrong parameter count for exp() .... on line 101
Run Code Online (Sandbox Code Playgroud)
我试图查找这个错误并没有太多运气.我读了一些关于传入错误参数的人的帖子,但我没有为该函数设置任何参数.我有什么关于PHP的东西吗?
下面是我的代码,我认为逻辑是正确的,因为我基于语法的解析树.$ input将来自HTML页面上的表单框.当我发现PHP4没有内置时,我也从不同的帖子中获取了str_split函数.
<html>
<body>
<?php
if(!function_exists("exp")){
function exp(){
term();
while($token == "+" …Run Code Online (Sandbox Code Playgroud) 我有一个有内部地图的POJO.我希望从我的JSON反序列化为HashMap,但Jackson将内部映射从JSON反序列化为LinkedHashMap.我可以通过将Map的类型从"Map"更改为"HashMap"来强制它使用HashMap,但是我想知道是否有办法告诉Jackson将其反序列化为Map的特定实现?
这是JSON:
{
"transforms": {
"variable_name1": [{
"min": 100,
"max": 200,
"value": 0.6
}],
"variable_name2": [{
"min": 100,
"max": 200,
"value": 0.6
}],
"variable_name3": [{
"min": 100,
"max": 200,
"value": 0.6
}]
}
}
Run Code Online (Sandbox Code Playgroud)
而变形类:
public class Transformer {
Map<String, List<Transform>> transforms;
public Transformer() {
transforms = new HashMap<String, List<Transform>>();
}
public void setTransforms(Map<String, List<Transform>> transforms) {
this.transforms = transforms;
}
}
Run Code Online (Sandbox Code Playgroud)
我如何使用ObjectMapper:
try(Reader reader = new InputStreamReader(TransformTester.class.getResourceAsStream("transforms.json"), "UTF-8")) {
ObjectMapper objMapper = new ObjectMapper();
Transformer tr = objMapper.readValue(reader, Transformer.class); …Run Code Online (Sandbox Code Playgroud) 我正在尝试更好地理解如何使用 Java 流。我有这些课程:
public class Plan {
List<Request> requestList;
}
public class Request {
List<Identity> identityList;
boolean isCancelled;
}
public class Identity {
String idNumber;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个方法,该方法返回包含具有匹配标识号的未取消请求的计划。
这是我尝试过的:
public static Plan findMatchingPlan(List<Plan> plans, String id) {
List<Plan> filteredPlan = plans.stream()
.filter(plan -> plan.getRequestList().stream()
.filter(request -> !request.isCancelled())
.filter(request -> request.getIdentityList().stream()
.filter(identity -> identity.getIdNumber().equals(id))))
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
java.util.stream.Stream<com.sandbox.Identity> cannot be converted to boolean
Run Code Online (Sandbox Code Playgroud)
我有点理解为什么会出现错误。嵌套过滤器返回一个不能被评估为布尔值的过滤器。问题是,我不知道我错过了什么。
任何帮助,将不胜感激。
我正在使用旧版本的 iText (2.1.7) 来合并 PDF。因为这是我可以使用的 MPL 下的最后一个版本。我无法改变这一点。
无论如何。我正在尝试合并多个 PDF。一切似乎都正常,但是当我浏览大约 1500 页时,生成的 PDF 无法打开(表现得好像它已损坏)
这就是我的做法:
private byte[] mergePDFs(List<byte[]> pdfBytesList) throws DocumentException, IOException {
Document document = new Document();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PdfCopy copy = new PdfCopy(document, outputStream);
document.open();
for (byte[] pdfByteArray : pdfBytesList) {
ByteArrayInputStream readerStream = new ByteArrayInputStream(pdfByteArray);
PdfReader reader = new PdfReader(readerStream);
for (int i = 0; i < reader.getNumberOfPages(); ) {
copy.addPage(copy.getImportedPage(reader, ++i));
}
copy.freeReader(reader);
reader.close();
}
document.close();
return outputStream.toByteArray();
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?在翻阅一定数量的页面时,是否有任何关于此的提示?没有抛出异常或任何东西。
我有一个关于为给定语言查找正则表达式的简单问题.
我被给予语言L,其中:
大号 = { 瓦特 ∈{0,1}*:瓦特恰好具有一对连续的零的}
我第一次尝试这是尝试L((0 + 1)*00(0 + 1)*),但我注意到问题就在于我有(0 + 1)*因为如果选择0,它可以是零多个,从而导致多对连续的零.
我也知道,我可能遇到的情况是,前面,中间和末尾有两个零.我只是不太确定如何为此创建正则表达式.
任何帮助深表感谢.
我只是对条件运算符有一个快速的问题.这里还是一个崭露头角的程序员.给出x = 1,y = 2,z = 3.
我想知道,为什么在这个声明之后:
y += x-- ? z++ : --z;
Run Code Online (Sandbox Code Playgroud)
y是5.语句后面的值是x = 0,y = 5,z = 4.我知道条件运算符的工作方式是它的格式如下:variable = condition?值为true:如果为false则为value.
对于条件,y + = x--,y如何变为5?我只能看到2(2 + = 0)和3(2 + = 1)(然后x--变为零)作为可能性.任何帮助深表感谢.:)
我正在研究会员算法,我正在研究这个特殊问题,其中说明如下:
展示一种算法,给定任何常规语言L,确定L = L*
所以,我的第一个想法是,我们有L*是L的Kleene星并且确定L = L*,我们不能只是说因为L是常规的,我们知道L*是根据定义指出的常规语言系列在星光关闭下关闭.因此L总是等于L*?
我觉得肯定还有很多东西,可能还有我想念的东西.任何帮助,将不胜感激.再次感谢.
我已经搜索过,但还没有看到任何人遇到我的情况……但这是我遇到的问题:
我试图将一小段 HTML 设置为我的 JEditorPane 的文本。这是代码:
JEditorPane htmlPane = new JEditorPane();
String imageString = "<img src=\"http://tfwiki.net/mediawiki/images2/thumb/3/37/Optimusg1.jpg/350px-Optimusg1.jpg\"/>";
String description = "<table width=300 border=0 cellspacing=0></table>" + imageString + "</table>";
htmlPane.setContentType("text/html");
htmlPane.setText(description);
Run Code Online (Sandbox Code Playgroud)
但是在我调用 setText 之后,我的编辑器窗格内容是:
<html>
<head>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我尝试过在字符串的开头和结尾添加<html>和 的变体</html>,但没有运气。有谁知道我错过了什么或做错了什么?
我使用的是 Java 1.7.0_55 32 位。
我试图将一个数组分成500个批次,但我想覆盖数组大小不均匀除以500的情况.例如:
Array = [1,...,1100]
subArray1 = [1..500]
subArray2 = [500..1000]
subArray3 = [1000..1100]
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
my @array = [prepopulated];
my $array_size = scalar(@array);
my $start = 0;
my $end = 500;
while ($start < $array_size) {
my @subArray = @array[$start..$end];
print Dumper(\@subArray);
$start = $end;
if($end + 500 > $array_size) {
$end = $start + ($array_size % 500);
} else {
$end += 500;
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但有没有更好的方法来做到这一点,或者在某些情况下,我没有看到这种情况?
java ×6
algorithm ×2
arrays ×1
big-o ×1
c ×1
certificate ×1
collections ×1
conditional ×1
cryptography ×1
html ×1
image ×1
itext ×1
jackson ×1
java-stream ×1
jeditorpane ×1
json ×1
keystore ×1
membership ×1
pdf ×1
perl ×1
php ×1
recursion ×1
regex ×1
string ×1
swing ×1
syntax ×1
theory ×1
windows ×1