0%

今天在刷题时遇到这个错,题目如下:

1
2
3
4
5
6
7
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

输入:"aabcccccaaa"
输出:"a2b1c5a3"

输入:"abbccd"
输出:"abbccd"

题目不难,遍历一遍就完事了,每次把不同的字符和次数加载新字符串后面,问题就出现在次数上:

1
2
ans.push_back(s[i]);
ans.push_back('0'+i-cur);

0-9 这样是没问题的,但是超过 9 就有问题了,提交代码就错了:

1
2
3
输入:"rrrrrLLLLLPPPPPPRRRRRgggNNNNNVVVVVVVVVVDDDDDDDDDDIIIIIIIIIIlllllllAAAAqqqqqqqbbbNNNNffffff"
输出:"r5L5P6R5g3N5V:D:I:l7A4q7b3N4f6"
预期:"r5L5P6R5g3N5V10D10I10l7A4q7b3N4f6"

查 ASCII 表就可以发现问题,9 后面是 :,正如错误答案一样 :p

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
二进制      十  八  图形
0011 0000 48 30 0
0011 0001 49 31 1
0011 0010 50 32 2
0011 0011 51 33 3
0011 0100 52 34 4
0011 0101 53 35 5
0011 0110 54 36 6
0011 0111 55 37 7
0011 1000 56 38 8
0011 1001 57 39 9
0011 1010 58 3A :
0011 1011 59 3B ;
0011 1100 60 3C <
0011 1101 61 3D =
0011 1110 62 3E >
0011 1111 63 3F ?

后面查了一下,C++ 11 有个新函数用来将 int 转 string:

1
2
3
4
5
6
7
8
9
std::string to_string(int value); (1) (C++11起)
std::string to_string(long value); (2) (C++11起)
std::string to_string(long long value); (3) (C++11起)
std::string to_string(unsigned value); (4) (C++11起)
std::string to_string(unsigned long value); (5) (C++11起)
std::string to_string(unsigned long long value); (6) (C++11起)
std::string to_string(float value); (7) (C++11起)
std::string to_string(double value); (8) (C++11起)
std::string to_string(long double value); (9) (C++11起)

替换掉之后就 OK 了!

出现这个问题已经很久了,明明已经添加了 ssh-key,但是每次 push 都要求输入用户名和密码,就很奇怪,记得在学校的时候没要求来着。

然后搜了一下,这个 解决 git pull/push 每次都要输入用户名密码的问题 解决了我的问题。

我用的方法二,的确我每次添加的都是 https 的方式,点击切换成 ssh,如图所示:


所以需要移除然后重新添加 ssh 的方式。

1
2
3
git remote rm origin
git remote add origin git@github.com:taseikyo/repo.git
git remote -v

之后就可以了。

前言

今天逛 GitHub 看到 FluentTerminal,想到最近用 Windows Terminal 各种不舒服,如启动贼慢,历史记录没有。在 WT 没出来之前一直用的 Cmder,它里面带了很多 Linux 中的命令(grep,find,rm,vi,vim etc.),后来为了尝鲜 WT 放弃了 Cmder,现在又想重新回到 Cmder 的怀抱了 2333。

扯远了,安装 FluentTerminal 有几种方式,其中有一种就是用 Scoop 来安装,之前在实验室电脑上安装过,默认安装位置和安装应用都在 C 盘,强迫症表示很难受,搜了一下其实可以自定义安装位置和应用安装位置的,每次都要搜,索性这次记录下来。

介绍

Scoop 是什么,简单来说,Scoop 是 Windows 下的一款包管理器,类似于 Ubuntu 中的 apt,centOS 中的 yum,有了 Scoop 很多软件可以不用去找它的安装包而是可以直接 scoop install xxx 搞定,当然 Scoop 也并非所有软件都支持,你可以先用 scoop search xxx 搜一下,看是否能找到,如果有就可以直接安装,如果没有,那很抱歉,只能自行去找安装包。

安装

首先检查 Scoop 所需环境是否满足,见其 GitHub Requirements

如果满足下面就可以安装了。

  1. 自定义安装位置
1
2
3
4
5
# 设置环境变量
$env:SCOOP='D:\Programs\scoop'
[Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')
# 安装
iwr -useb get.scoop.sh | iex

测试是否安装成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
taseikyo :: D:\Programs\scoop » scoop help
Usage: scoop <command> [<args>]

Some useful commands are:

alias Manage scoop aliases
bucket Manage Scoop buckets
cache Show or clear the download cache
checkup Check for potential problems
cleanup Cleanup apps by removing old versions
config Get or set configuration values
create Create a custom app manifest
depends List dependencies for an app
export Exports (an importable) list of installed apps
help Show help for a command
hold Hold an app to disable updates
home Opens the app homepage
info Display information about an app
install Install apps
list List installed apps
prefix Returns the path to the specified app
reset Reset an app to resolve conflicts
search Search available apps
status Show status and check for new app versions
unhold Unhold an app to enable updates
uninstall Uninstall an app
update Update apps, or Scoop itself
virustotal Look for app's hash on virustotal.com
which Locate a shim/executable (similar to 'which' on Linux)


Type 'scoop help <command>' to get help for a specific command.
  1. 自定义应用全局安装位置
1
2
3
4
5
6
# 设置环境变量(需要管理员权限)
$env:SCOOP_GLOBAL='D:\Programs\scoop'
[Environment]::SetEnvironmentVariable('SCOOP_GLOBAL', $env:SCOOP_GLOBAL, 'Machine')
# 使用
scoop install -g sudo
sudo scoop install -g 7zip curl grep

每次重装系统都会重新百度怎么安装 oh-my-zsh 索性记录下来

zsh

1
sudo apt-get install zsh

oh-my-zsh

1
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

替换自己默认的 bash

1
vim /etc/passwd

“taseikyo:x:1000:1000::/home/taseikyo:/bin/bash” → “taseikyo:x:1000:1000::/home/taseikyo:/bin/zsh”

修改主题

上面连接中给了很多主题,但是我习惯了 agnoster

1
vim ~/.zshrc

修改 “ZSH_THEME” 为 “agnoster”

退出重新登录就好了

autojump

当你习惯了 autojump 操作之后,没了它就会觉得十分别扭

1
sudo apt-get install autojump

在 zsh 的配置文件中加上 . /usr/share/autojump/autojump.sh

最后 source ~/.zshrc 大功告成!

哦对了,记得把 alias gs="git status" 也写入配置文件。

autosuggestions

自动补全命令的功能也是必不可少的。

  1. 将该插件到 .oh-my-zsh 的插件目录
1
git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
  1. 启用该插件

编辑配置文件,找到 “plugins=(git)” 并修改为 “plugins=(git zsh-autosuggestions)”
然后 source 配置文件即可。

参考下面文章:

上面文章中给出了 4 种方法,其实我就试了两种,起作用的是最后一种。

第二种是修改虚拟机属性,将 “硬件” “网络适配器” 改为 “NAT模式(N):用于共享主机的IP地址”,当然这种办法没用,因为本来默认就是这个选项。

最后一种是打开 “编辑” “虚拟网络编辑器”,直接恢复默认设置,在这个操作之前需要关闭虚拟机,之后会有卸载然后重新安装网络服务的过程,完成之后打开虚拟机,使用 ping 命令测试:

1
2
3
4
tian@hust:~/桌面$ ping baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=128 time=37.3 ms
...

打开火狐,输入 baidu.com 网页正常打开 👍

前言

听说 vscode 安装 Remote-SSh 就能够远程连接服务器,于是试了下,果然如此,这下就很方便,比较 vscode 比 vim 还是方便地多。有个问题是对于有 IP 的服务器可以直接在 C:\Users\taseikyo\.ssh\config 配置,如下:

1
2
3
4
Host node
HostName a.b.c.d
User taseikyo
IdentityFile C:\Users\taseikyo\.ssh\id_rsa

但是对于只能内部跳转的服务器无法直连,这个时候就需要一个有 IP 的节点作为跳板跳转,此时在 vscode 中怎么配置呢?于是有了这篇文章。

Read more »

上周五 node10 又无法直接连接,不知道是什么问题,当时没注意,今天来连接还是不行,谷歌百度了好多方法就是不行,因为它问题很怪,可以上网,可以 ping 我 windows ip,但是 ping 不通网关,无法用 Xshell 连接,就很烦。

最后我灵机一动,将两个网卡配置互换了,以前是第一个网卡(eno1,10.192.16x.xxx)做内网跳转,第二个网卡(enp4s0f1,211.69.19x.xxx)做外网连接,交换之后就可以直连了,虽然成功了但是不知道问题何在。